データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

6
毎月第3金曜日を決定する
SQL Serverの「1.1.1996-30.8.2014」の日付範囲の「各月の第3金曜日」である日付を決定する必要があります。 私はの組み合わせを使用する必要があり期待DENSE_RANK()してPARTITION BY()セット「ランク= 3」に。しかし、私はSQLが初めてであり、正しいコードを見つけることができません。

4
テーブルフィールドを削除した後のディスク領域の要求
私はSQL 2008 r2を実​​行していますが、非常にアクティブで使用されているテーブルにntextフィールドを追加するまで、データベースは過去3年間正常かつ高速に動作していました。このテーブルのサイズが非常に大きくなっているため、サーバースペースを使い始めています。 何年も高速に動作していたため、dbのインデックス付けを失いたくはありませんし、断片化の支出も受けたくないのです。 そのフィールドとそのすべての値を削除することにしました: ntextフィールドとそのすべての値を削除し、インデックスを削除せず、縮小せずに、dbのパフォーマンスを失うことなくスペースを解放する方法はありますか? 過去5か月のサイズ拡張を示すために、dbサイズクエリ出力を添付します。

9
WHERE句の代替[クローズ]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックデータベース管理者スタックExchange用。 4年前に閉鎖されました。 SELECT使用せずに、列に特定のデータを持つ行のみを作成する方法はありWHEREますか? たとえば、これがあった場合: SELECT * FROM Users WHERE town = 'Townsville' 文にWHERE句を実装する方法はありSELECTますか? 何かのようなもの SELECT *, town('Townsville') FROM Users 奇妙な質問ですが、仲間から尋ねられた質問です
16 sql-server 

2
検索文字列が長くなると、トライグラム検索が非常に遅くなります
Postgres 9.1データベースには、table1約150万行と1列のテーブルがありますlabel(この質問のために簡略化された名前)。 機能的なtrigram-indexがありますlower(unaccent(label))(インデックスでunaccent()使用できるように不変にされています)。 次のクエリは非常に高速です。 SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms ただし、次のクエリは遅くなります。 SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms また、検索がより厳密であっても、単語の追加はさらに遅くなります。 私は最初の単語のサブクエリを実行し、次に完全な検索文字列でクエリを実行する簡単なトリックを試しましたが、クエリプランナは(悲しいことに)私の陰謀を見ました: EXPLAIN ANALYZE SELECT * FROM ( SELECT id, …

3
サブクエリを使用した大きなテーブルでの更新が遅い
でSourceTable> 15MMレコードとなるBad_Phrase> 3Kの記録を持つ、次のクエリは、SQL Server 2005のSP4上で実行するために、ほぼ10時間かかります。 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) 英語では、このクエリは、フィールドのサブているBad_Phraseに記載されている明確なフレーズの数カウントしているName中でSourceTable、その後のフィールドにその結果を置くことをBad_Count。 このクエリを非常に高速に実行する方法についての提案をお願いします。

6
SQL Server 2008 R2のインストール中に「指定されたアカウントは既に存在します」エラーを解決する方法
最近、Visual Studio 2012とSQL Server 2008 R2を新しい開発マシンにインストールするときに問題が発生しました。私のインストールシーケンスはVisual Studio 2012で、SQL Server 2008 R2をインストールしました。 SQL Serverのインストール中にエラーが発生しました: 指定されたアカウントは既に存在します。 私はこの問題を解決するために一日を費やしました。

2
IDENTITY列の予期しないギャップ
1から始まり1ずつ増加する一意の注文番号を生成しようとしています。このスクリプトを使用してPONumberテーブルを作成しています。 CREATE TABLE [dbo].[PONumbers] ( [PONumberPK] [int] IDENTITY(1,1) NOT NULL, [NewPONo] [bit] NOT NULL, [DateInserted] [datetime] NOT NULL DEFAULT GETDATE(), CONSTRAINT [PONumbersPK] PRIMARY KEY CLUSTERED ([PONumberPK] ASC) ); このスクリプトを使用して作成されたストアドプロシージャ: CREATE PROCEDURE [dbo].[GetPONumber] AS BEGIN SET NOCOUNT ON; INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1); SELECT SCOPE_IDENTITY() AS PONumber; END 作成時に、これは正常に機能します。ストアドプロシージャが実行されると、目的の数から始まり、1ずつ増加します。 奇妙なことは、コンピューターをシャットダウンまたは休止状態にした場合、次にプロシージャを実行すると、シーケンスがほぼ1000ずつ進んだことです。 以下の結果を参照してください。 数字が8から1002にジャンプしたことがわかります。 …

1
関数パラメーターとUSING句を使用したJOINの結果との名前の競合
現在のPostgres 9.4でのこのセットアップを考えると(この関連する質問から): CREATE TABLE foo (ts, foo) AS VALUES (1, 'A') -- int, text , (7, 'B'); CREATE TABLE bar (ts, bar) AS VALUES (3, 'C') , (5, 'D') , (9, 'E'); 前の質問からのSQL Fiddleもあります。 私が書いたSELECTとをFULL JOIN参照し、質問の目的を達成するために。簡略化: SELECT ts, f.foo, b.bar FROM foo f FULL JOIN bar b USING (ts); 仕様に従って、列をアドレス指定する正しい方法tsは、テーブル修飾なしです。入力値(f.tsまたはb.ts)のいずれかをNULLにすることができます。このUSING句は、奇妙なケースを少し作成します。実際には入力に存在しない「入力」列を導入します。これまでのところとてもエレガント。 …

3
各ノードにランダムな数の子がある複数レベルの階層を作成する
階層を含むテストデータを作成する必要があります。私はそれを簡単にし、いくつかのことをすることができましたが、それCROSS JOINは私に完全に均一な/変化のない構造を与えるでしょう。それは鈍いように見えるだけでなく、テストデータの変動がないために、他の方法では見つからない問題を隠してしまうことがあります。だから、私はこれらのルールに従う不均一な階層を生成したいと思っています: 深さ3レベル レベル1はランダムに5〜20ノードです レベル2は1〜10ノードで、レベル1の各ノードごとにランダムです レベル3は1〜5ノードで、レベル2の各ノードごとにランダムです すべてのブランチは3レベルの深さになります。この時点で深さの均一性は問題ありません。 任意のレベルで子ノードの名前が重複する可能性があります(つまり、子ノードの名前は、同じレベルのすべてのノードで一意である必要はありません)。 ここで「ランダム」という用語は、一意にランダムではなく、疑似ランダムであると定義されています。「ランダム」という用語は「複製を生成しない特定のセットのランダムな順序」を意味するためによく使用されるため、これについて言及する必要があります。ランダム=ランダムを受け入れ、レベル1の各ノードあたりの子の数が4、7、および8のみである場合、レベル1の20のノードでさえ、それらのノードごとに1-10の子の潜在的な広がりがある場合、それは問題ありません、なぜならそれがランダムであるからです。 これは入れ子にすると非常に簡単にできますが WHILEループを使用してますが、設定ベースのアプローチを見つけることが優先ます。一般的に、テストデータの生成にはプロダクションコードに必要な効率性の要件はありませんが、セットベースのアプローチの撮影はより教育的であり、問​​題に対するセットベースのアプローチを見つけるのに役立つでしょう。したがって、WHILEループは除外されませんが、セットベースのアプローチが不可能な場合にのみ使用できます。 Set-based =理想的には、CTE、APPLYなどに関係なく、単一のクエリです。したがって、既存またはインラインの数値テーブルを使用するのが適切です。WHILE / CURSOR /手続き型アプローチを使用しても機能しません。操作がすべてセットベースでループがない限り、データの一部を一時テーブルまたはテーブル変数にステージングすると思います。ただし、そうは言っても、複数クエリアプローチの方が実際に優れていることが示されない限り、単一クエリアプローチの方が複数のクエリよりも好まれます。「より良い」を構成するものは通常主観的であることに注意してください;-)。また、前の文での「通常」の使用も主観的であることに留意してください。 SQL Serverのすべてのバージョンとエディション(2005年以降、私は推測します)で対応します。 純粋なT-SQLのみ:その愚かなSQLCLRのものはありません!! 少なくともデータの生成に関しては。ディレクトリとファイルの作成は、SQLCLRを使用して行われます。しかし、ここでは、作成するものの価値を生成することに焦点を当てています。 T-SQL Multi-statement TVFは、外部ではセットの手続き型アプローチをマスクしているにもかかわらず、セットベースではなく手続き型と見なされます。それが絶対に適切な場合があります。これは当時のものではありません。それらと同じ線に沿って、T-SQLスカラー関数も手続き型であるという理由だけでなく、クエリオプティマイザーが値をキャッシュして、出力が期待どおりにならないように繰り返すこともあります。 T-SQLインラインTVF(別名iTVF)は、セットベースであるため、okey-dokey [ CROSS | OUTER ] APPLYであり、上記のok として説明したを使用するのと実質的に同じです。 クエリを繰り返し実行すると、前回の実行とほとんど異なる結果が生成されます。 明確化の更新1:最終結果セットは、レベル1で始まるフルパスを持つ、レベル3の個別のノードごとに1つの行を持つように表現する必要があります。これは、単一のLevel3ノードのみを含む単一のLevel2ノードしかない場合を除いて、Level1とLevel2の値が必ず1つ以上の行にわたって繰り返されることを意味します。 明確化の更新2:番号だけでなく、名前またはラベルを持つ各ノードに非常に強い優先順位があります。これにより、結果として得られるテストデータがより有意義で現実的になります。 この追加情報が重要かどうかはわかりませんが、何らかのコンテキストが役立つ場合に備えて、テストデータはこの質問に対する私の回答に関連しています。 XMLファイルをSQL Server 2012にインポートする この時点では関係ありませんが、この階層を生成する最終目標は、ディレクトリ構造を作成して、再帰的なファイルシステムメソッドをテストすることです。レベル1と2はディレクトリになり、レベル3はファイル名になります。私は周りを検索しました(ここでもGoogle経由でも)で、ランダムな階層を生成するための参照が1つだけ見つかりました。 Linux:ランダムなディレクトリ/ファイル階層を作成する (StackOverflowでの)その質問は、テスト用のディレクトリ構造を作成しようとするため、実際には望ましい結果の点で非常に近いです。しかし、その質問(および回答)はLinux / Unixシェルスクリプトに焦点を当てており、私たちが住んでいるセットベースの世界ではありません。 これで、ランダムデータを生成する方法がわかりました。また、バリエーションを表示できるように、ファイルのコンテンツを作成するために既にそうしています。ここで注意が必要なのは、特定のフィールドではなく、各セット内の要素の数がランダムであることです。また、各ノード内の要素の数は、同じレベルの他のノードからランダムである必要があります。 階層の例 Level 1 Level 3 |---- …

1
リモートのpostgresqlデータベースに接続できません
リモートpsqlデータベースに接続しようとしています。pg_hba.confエントリにクライアントのIPアドレスを追加する前に、エラーメッセージが表示されました。 xdev@xdevbox:~$ psql -U postgres testdb -h 10.1.1.47 psql: FATAL: no pg_hba.conf entry for host "10.201.50.71", user "postgres", database "testdb", SSL off クライアントのIPに信頼設定を追加しました。また、サーバー上のpostgres.confのリッスンアドレスを変更して、「*」をリッスンしました。次に、/ etc / init.d / postgresql restartコマンドを使用してデータベースサーバーを再起動しました。 接続しようとすると、次のエラーメッセージが表示されます。 psql: could not connect to server: Connection refused Is the server running on host "10.1.1.47" and accepting TCP/IP connections on …


2
結合述語で変数を参照すると、ネストされたループが強制されるのはなぜですか?
最近この問題に遭遇しましたが、オンラインで議論することができませんでした。 以下のクエリ DECLARE @S VARCHAR(1) = ''; WITH T AS (SELECT name + @S AS name2, * FROM master..spt_values) SELECT * FROM T T1 INNER JOIN T T2 ON T1.name2 = T2.name2; ネストされたループ計画を常に取得します 問題INNER HASH JOINまたはINNER MERGE JOINヒントで問題を強制しようとすると、次のエラーが生成されます。 このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを指定せずに、SET FORCEPLANを使用せずに、クエリを再送信します。 ハッシュ結合またはマージ結合の使用を許可する回避策を見つけました-変数を集約にラップします。生成された計画は大幅に低コストです(19.2025対0.261987) DECLARE @S2 VARCHAR(1) = ''; WITH T AS (SELECT …

2
データベースのデフォルトの照合順序を変更したときのLatin1_General_BINのパフォーマンスへの影響
データベース照合をに設定して、Latin1_General_BIN文字列比較で大文字と小文字を区別します。これはパフォーマンスに影響しますか?データベースのDMLまたはDDL操作に影響はありますか?データベースは既にテーブルとともに存在しています。

3
間違ったファイル許可のためにMySQLサーバーを起動できませんか?
私はサーバーを起動してからrootユーザーを修正しようとしています $ mysql -u root mysql $mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root'; $mysql> FLUSH PRIVILEGES; しかし、サーバーは起動できません。 $ mysqld --skip-grant-tables 2014-10-21 07:18:24 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2014-10-21 07:18:24 1967 [Warning] Can't create test file /usr/local/mysql-5.6.21-osx10.8-x86_64/data/x4430.lower-test …

2
SQL Server拡張イベントデータの視覚化
最近、SQL Serverの拡張イベントを使用して、さまざまなクエリのベンチマークと最適化に役立てています。これまでのところ、イベントデータを表示するには、SSMSの「ライブデータの監視」機能を使用していました。 私が抱えている問題は、ライブイベント機能が内部バッファーを使用しているように見えることです。つまり、クエリを数回実行して、情報をウィンドウに表示する必要がある場合があります。したがって、2つの部分からなる質問があります。 ライブフィードにイベントを表示する際のこの遅延を回避する方法はありますか?(私はローカルデータベースでこれを行っているので、パフォーマンスは問題になりません) ライブフィードは、拡張イベントデータを視覚化する最良の方法ですか?SSMSには、ユースケースに適した別のツールがありますか? 更新 要求に応じて、セッションは次のとおりです。 CREATE EVENT SESSION [Simple Query Benchmarking] ON SERVER ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1) ACTION(sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text) WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[greater_than_uint64]([duration],(1000)))) ADD TARGET package0.ring_buffer WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF) GO

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.