問題タブ [sqlperformance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
77 参照

sql - サブクエリを削除してクエリ速度を向上させる

このクエリの高速化を目指しています。現時点では、実行に20秒強かかりますが、これはひどいことです。

および JOIN 関数を使用してサブクエリを削除する方法が見つかりません。

SQL:

usersデータベース構造を理解するために、 用と用の 2 つのメイン テーブルがありますmanual。他のテーブルには追加のデータが保持され、ユーザーの ID とリンクされており、ユーザーがmanual属しているデータベースを確認するために呼び出される別のフィールドがあります。

私が抱えている問題は、他のテーブルに追加のデータがあるかどうかを示すために、そのユーザーのデータが必要なことです。JOIN 関数を使用してこれをテストしたところ、レコードは結果から完全に削除されました。

LEFT JOIN書き換えが必要なクエリの主要部分はsだと思います。私はこれと同じことをする方法を見つけることができません:LEFT JOIN orders ON users.id = orders.user AND orders.id = (SELECT MAX(id) FROM orders WHERE status = 3 AND user = users.id)

0 投票する
2 に答える
868 参照

sql - SQL ビューで選択されていない列は実行されますか?

これに対する答えを検索するための適切なキーワードを思いつくことができなかったので、既に答えられていたら申し訳ありません。

次の SQL ビューを検討してください。

次のクエリを実行すると、サブクエリが実行されますか、それとも SQL Server がクエリを最適化しますか?

私はこれをパフォーマンスの観点から見ています。たとえば、ビューにかなりの数のサブクエリがある場合です (内部選択が大きなテーブルを参照している場合、集計には時間がかかる可能性があります)。

私は SQL Server 2008 R2 を使用していますが、答えが 2012 または MySQL で異なるかどうかを知りたいです。

ありがとう。

0 投票する
2 に答える
10406 参照

sql - TSQL - 小さなリストには IN (リスト) を使用するか、NOT IN (リスト) を使用する方が高速ですか?

私の列の 1 つは、4 つの可能な値 ( val1val2val3)のみを含むことができますval4

WHEREこれらの 4 つの値 (つまり ) の 1 つを除外するには、句に追加のフィルターを追加する必要がありますval4

使用するのが速くなるでしょうかNOT IN ('val4')、それともIN ('val1','val2','val3')

0 投票する
1 に答える
4763 参照

mysql - FINd_IN_SET と IN 句の使用 MYSQL ストアド プロシージャ

以下のようなストアドプロシージャがあります

ここTagIntegerコラムがあります。

コンマ区切りの値を文字列としてストアド プロシージャに渡すのにうんざりしましたが、機能しません。次に、以下のようなストアドプロシージャを使用しました

これは非常にうまく機能します。唯一の問題は、テーブルが非常に大きいことです。何百万もの行があり、FIND_IN_SET を使用すると、直接 SQL ステートメントを実行する場合に IN に比べて時間がかかりすぎます。

使用するのに最適なパフォーマンス最適化オプションは何ですか?

IDを整数に変換し、IN句の準備ができて解析できる分割関数はありますか? それが最良の選択肢になると思います。提案やアイデアはありますか?

0 投票する
2 に答える
191 参照

sql - 時間間隔をクエリするときの SQL パフォーマンス

tickets関連する 3 つの列を含む 1 つのテーブルがあります: id、where 、startおよびare 。finishstartfinishtimestamps

intervals関連する列が 1 つだけの 2 番目のテーブル ( ) がありtime pointます。time_pointtimestampです。time_point常に 15 分ごとです。この 2 番目のテーブルの内容は次のとおりです。

最初のテーブル (チケット) には 400 万件のレコードがあります。2 番目には 96 レコードしかありません (24 * 4)。

開いているチケットの数を選択する必要がありますtime_point

次のクエリを書きました: (簡易版)

これは機能しますが、遅すぎます。問題は、両方のテーブル間に実際の結合がなく、すべての行に対して完全なテーブル スキャンが実行されることです。

ここでパフォーマンスを向上させるにはどうすればよいですか?

ありがとう!

編集: これは Oracle DB です。

0 投票する
2 に答える
318 参照

sql-server-2008 - 相関更新の最適化

次のクエリのパフォーマンスを向上させるにはどうすればよいですか:

tもっている:

  • recent_5_min - money null -もちろん null 可能です。これはジョブによってのみ入力されるためです。
  • value - お金、null 以外
  • 日付 - int、クラスター化されたインデックスを持つ PK。これは、テーブルの唯一のインデックスです。

t900K のレコードがあり、統計は最新であり、クエリの実行には時間がかかります。

更新 1 - 最初に投稿したクエリによって生成されたサンプル データ。

前:

後:

0 投票する
4 に答える
4608 参照

c# - SQL Server の挿入が遅い - SqlBulkCopy のパフォーマンス

3,000 万行のデータベースがあります。PK クラスター化インデックスは、生成されたコードGUIDです。

表は次のとおりです。

簡単に言えば、画像検索エンジンです。

  • imageEventGUIDはコード固有の識別子です。
  • imageSHAID画像 URL の SHA256 です。
  • queryGUIDコードで生成された FK です (簡潔にするために create ステートメントから除外されます)。
  • eventTypeイベントの種類に割り当てられた番号です
  • eventValue通常、画像の URI です。たとえば、" http://mywebpage.com/images/image123456789.jpg "です。

かなり標準的なコードを使用して、定期的に via SqlBulkCopy(from a ) をこのテーブルに挿入します。DataTable

通常、1 回の一括挿入で 5k から 10k 行を挿入しようとしています。この一括コピーの挿入結果がひどいです。私はこの DB を SSD (SATA 1 のみが接続されている) で実行していましたが、非常に高速でした (500 ミリ秒未満)。SSD の空き容量がなくなったので、DB を 1TB 7200 キャッシュ回転ディスクに交換しました。完了時間が 120 秒 (120000 MS) を超えているためです。一括挿入が実行されているとき、約 1MB/秒のディスク アクティビティが見られ、CPU 使用率が低いことがわかります。

このテーブルには、PK 以外のインデックスはありません。

あなたへの私の質問は次のとおりです。

これを引き起こす原因となる、私が間違っていることは明らかですか?

「あなたの回転するディスクは、このサイズのDBには十分な速度ではありません」という単なるケースですか?

このデータの挿入で正確に何が起こっているのでしょうか? クラスター化されたインデックスであるため、挿入時にディスク上のデータ ページを再配置しますか? 本質的に順序付けされていない GUID を挿入しようとしているため、この「ランダムな挿入の性質」により、読み取り/書き込みヘッダーがディスク上の別のページに頻繁に移動する可能性がありますか?

御時間ありがとうございます。

0 投票する
1 に答える
4349 参照

sql - SQL Server : MERGE のパフォーマンス

500 万行のデータベース テーブルがあります。クラスター化インデックスは自動インクリメント ID 列です。PK は、URL の SHA256 ハッシュである 256 バイトVARCHARで生成されたコードです。これは、テーブルの非クラスター化インデックスです。

表は次のとおりです。

  • imageSHAID" http://blah.com/image1.jpg " などの画像 URL の SHA256 ハッシュで、長さ 256 の varchar にハッシュされます。

  • imageGUID画像を識別するコード生成された GUID です (後でインデックスとして使用されますが、今のところ、この列をインデックスとして省略しています)

  • imageURL画像の完全な URL です (最大 2000 文字)

  • showCountは、画像が表示される回数です。これは、この特定の画像が表示されるたびに増加します。

  • imageURLIndexは 450 文字に制限された計算列です。これにより、必要に応じて imageURL でテキスト検索を実行できます。インデックス化可能です (ここでも簡潔にするためにインデックスは省略されています)。

  • autoIncIDはクラスター化インデックスであり、データの挿入を高速化する必要があります。

定期的に、一時テーブルからテーブルにマージしstore_imageます。一時テーブルの構造は次のとおりです (store_image テーブルと非常によく似ています)。

マージ プロセスが実行DataTableされると、次のコードを使用して一時テーブルに a を書き込みます。

次に、merge コマンドを実行して、に基づいて一時テーブルからマージすることによりshowCount、テーブル内のを更新します。画像が現在テーブルに存在しない場合は、作成します。store_imageimageSHAIDstore_image

私は通常、store_image1 つのマージ プロセスで一時テーブルからテーブルに 2,000 ~ 5,000 行をマージしようとしています。

私はこの DB を SSD (SATA 1 のみが接続されている) で実行していましたが、非常に高速でした (200 ミリ秒未満)。SSD の空き容量がなくなったので、DB を 1 TB 7200 キャッシュ回転ディスクに交換しました。これは、完了時間が 6 ~ 100 秒 (6000 ~ 100000MS) を超えているためです。一括挿入の実行中は、ディスク アクティビティが約 1MB ~ 2MB/秒で、CPU 使用率が低いことがわかります。

これは、この量のデータの典型的な書き込み時間ですか? 少し遅いように思えますが、パフォーマンスが遅い原因は何ですか? 確かimageSHAIDにインデックス化されているので、これよりも速いシーク時間が期待できるでしょうか?

どんな助けでも大歓迎です。

御時間ありがとうございます。