別のテーブルの対応する行を持つ1つのテーブルのすべての行を選択するとします(他のテーブルのデータは重要ではなく、対応する行が存在するは重要)。私がDB2について知っていることから、INNER JOINではなくEXISTS句を使って相関クエリとして記述すると、このようなクエリが優れたパフォーマンスを発揮します。これはSQL Serverでも同じですか?それとも何か違いはありませんか?SQL Serverの相関クエリと内部結合のパフォーマンス
答えて
私はテストクエリを実行しましたが、2つのステートメントはまったく同じ実行プランで終了しました。もちろん、パフォーマンスに関する質問については、自分の環境でテストを実行することをお勧めします。 SQL Server Management Studioの場合、これは簡単です(実行中の2000の場合はSQLクエリアナライザ)。両方のステートメントをクエリウィンドウに入力するだけで、クエリ|実際のクエリプランを含めるを選択します。次に、クエリを実行します。 [結果]タブに移動すると、計画の内容とコストの高さを簡単に確認できます。
奇数:私は通常、相関クエリとしてこれらを記述するのが自然です。まず、SQL ServerオプティマイザがSQL Serverの最適化ツールを使用する可能性が高いため、戻ってジョインを使用する必要があります。それを得る。
しかし、私をあまり真剣に受け入れないでください。私はここで26Kの担当者と2つの現在のSQLトピック特有のバッジのうちの1つしか持っていませんが、私は実際にはSQLの知識の面でかなり後輩です(それはボリュームに関するすべてです!確かに私はDBAではありません。実際には、もちろん、実際のパフォーマンスを測定するために各メソッドをプロファイリングする必要があります。 オプティマイザがあなたに求めているものを認識し、いずれかのクエリを最適な方法で処理することを期待していますが、チェックするまではわかりません。
これは私にとっては自然に書ける方法ですが、これは主に私のDB2の偏差によるものです)。実際には、これはDB2の最適化された外観に欠陥がありますが、これも同様に認識できるはずです。 –
私は同意します。私は通常、オプティマイザが相関サブクエリよりも時間の割合が高いジョインを正しく取得することを発見しました。しかし、あなたが言うように、走行距離は変わるかもしれません。 – mwigdahl
誰もが注意するように、それはすべてオプティマイザにまでわかります。より自然な感じで書くことをお勧めします。その後、オプティマイザが最も効果的なクエリプランを見つけ出すことができます(統計の収集、インデックスの作成など)。 SQL Serverオプティマイザは、作業に必要な情報を提供している限り、全体的に見ても非常に優れています。
おそらく、最高のパフォーマンスは、派生テーブルへの結合によるものです。 Existsはおそらく次のものです(より速いかもしれません)。最悪のパフォーマンスは、セレクト内のサブクエリにあり、セットではなく行ごとに実行される傾向があります。
しかし、すべてが等しく、データベースのパフォーマンスはデータベース設計に大きく依存しています。私はすべての可能な方法を試してみて、どちらがあなたの状況においてより速いかを見ていきます。
結合を使用します。小さなテーブルがある場合はパフォーマンスの違いはほとんどありませんが、「外側」テーブルが非常に大きい場合は、各行に対してEXISTSサブクエリを実行する必要があります。テーブルが共通の列にインデックスされている場合は、INNER JOINを実行する方がはるかに迅速になるはずです。ところで、2番目のテーブルにないすべての行を検索する場合は、LEFT JOINを使用し、2番目のテーブルでNULLをテストします。非常に大きなテーブルとインデックスを持つときにEXISTSを使用するよりもはるかに高速です。
- 1. SQL Server 2008の内部結合と外部結合の混合
- 2. SQL Serverの速度:左外部結合対内部結合
- 3. SQL Server - 更新時の内部結合
- 4. 内部結合と左結合のためSQLクエリが遅い?
- 5. SQL Server 2008のネストループ結合とハッシュ結合の相違点
- 6. QODBSとSQL Serverクエリのパフォーマンス
- 7. joomlaの内部結合クエリ
- 8. 結合パフォーマンスの悪いSQLクエリ
- 9. SQL Server:左側の外部結合+依存内部結合でクエリを作成する方法
- 10. 内部結合と外部結合SQL文の比較
- 11. 内部結合のSQLカウント
- 12. sql、クエリの最適化と内部結合?
- 13. SQL Serverの外部結合の問題
- 14. SQL Server:最大日付と内部結合
- 15. SQL Serverクエリのパフォーマンスwhere節
- 16. Mysql内部結合クエリ
- 17. Linqクエリの内部結合フェッチ
- 18. SQL内の相関クエリのヘルプ
- 19. T-SQLの内部結合最初の内部結合の結果
- 20. SQL Server高密度ランク/内部結合概念の明確化?
- 21. SQL Server内部結合重複レコードの作成
- 22. SQL内部結合パフォーマンスアドバイス
- 23. SQL外部結合関数
- 24. SQL Serverの結合とカウント
- 25. NetTierとの内部結合
- 26. Windows Mobile:内部結合クエリdoesnt work
- 27. 大量のデータの処理とSQL Server 2008の12個の内部結合によるクエリ
- 28. SQL内部結合からの更新
- 29. SQL Serverのクエリのパフォーマンスの謎
- 30. SQLの内部結合がSQL Serverで機能していませんか?
さて、テストするのに適切な大きさのDBがある場合にのみ実行できますが、私はあなたの返事を当然受け取りません。 –