異なるドライブにある複数のテーブルからデータを結合したい場合、SQL はデータを並列にプルしますか? 関連する設定や知っておくべきヒントはありますか?
3 に答える
少なくとも SQL Server 2005 以降では、UNION は並行して実行する必要があります。
テーブルが別のドライブにあっても同じドライブにあっても違いはありません。現代の世界では、ディスクは仮想であるか、複数の読み取りヘッドを持つことができます。1 つのドライブと複数のドライブの区別は、ますます関連性が低くなります。
MAXDOP を 1 に設定すると、スレッドは 1 つだけになります。
UNION は UNION ALL よりもはるかに遅くなることに注意してください。
ブランドン。. . ここで回答させてください。古いスタイルのアーキテクチャの観点から考えているようです。これらは間違いなくまだ存在します。ただし、最新のディスクには複数の読み取りヘッドと複数のプラッターがあります。多くの場合、データを返す際の問題には、読み取り速度ではなく、コントローラー レベルの帯域幅が関係しています。また、複数レベルのキャッシュと先読みがあります (場合によっては、ファイル システム レベルとデータベース レベルの両方で)。多くの場合、データベース エンジンにこの複雑さを管理させたほうがよいでしょう。
たとえば、私が今取り組んでいるマシンは、実際には仮想マシンです。私が使用するディスクは、EMC ボックスのパーティションです。プロセッサーは、大きな箱に入ったプロセッサーのセットです。
SQL Server のマルチスレッドについての私の理解では、それはクエリ オプティマイザに任せる必要があります。最適な場合、クエリは並列で実行されます。
ヒントを使用してスレッドの数を制限できます(SQL Server で OPTION(MAXDOP 1) を使用する目的は何ですか? を参照してください)。MAXDOP
デフォルトの動作は、可能かつ最適な場合に並行して実行することです。
結合されたクエリの順序だけによって、データが特定の順序で返されるとは考えていません。
私にとって、そのようなことをしなければならないときは、ソートを処理するためだけに、常にそのクエリ全体をサブ選択としてラップします。次のように
Select pk_id, value from ( select pk_id, value from table1 union 選択 pk_id, value from table2 ) PK_id, value による順序
そうすれば、返ってきたものに驚くことはありません。