「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
SQL Serverでは、結合方法を
から選択できる。
特徴 †
三つのアルゴリズムは,一般的に
ネスト・ループ結合 < マージ結合 < ハッシュ結合
の順で高速(ハッシュ結合が最速)。
ただし、以下のケースでは、必ずしもこの順番にならない。
- 二つのテーブルのレコードの数が極端に違う場合
- 両方のレコードの数が十分小さいとき
- 検索条件に合致した1レコードを早く返したい
ネスト化ループ結合 †
- 単純に二重ループを回してテーブルを結合する方法
- インデックスが設定されていない小さなテーブルと
インデックスが設定されている大きなテーブルの二つを結合する場合に効果的
マージ結合 †
- 二つのテーブルの結合フィールドをあらかじめソート。
- ソート結果の結合フィールドのポインタを上から下へと順に走査。
- これによって、レコードの走査が1回で済む。
ハッシュ結合 †
- ハッシュ結合は高速だが、
- ハッシュ テーブルを作成するため、
- 元のテーブルのサイズが大きい場合、
ハッシュ テーブルがメモリを大量に消費することがある。
監視方法 †
この場合、パフォーマンス カウンタを使用して監視を行う。
この場合、
- SQL Server:Buffer Manager:Free pages
- SQL Server: SQL Statistics:SQL Compilations/sec
のカウンタ値が低く、
- SQL Server:Buffer Manager:Stolen Page Count
- SQL Server:Buffer Manager:Memory Grants Pending
のカウンタ値が高いという状態になる。
対策方法 †
この状態では、SQL Serverのメモリ不足が発生する可能性がある。
この場合、「ネスト化ループ結合「に変更できる
「ハッシュ結合」を使用しているクエリを探すことに重点を置く。
結合方法の見分けるには、実行プランを確認する。
参考 †
詳細は、以下のURLを参照のこと。
Tags: :データアクセス, :SQL Server, :障害対応, :性能