「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>SQL Server]] * 目次 [#c3ba8eb5] #contents *概要 [#z377f5c9] SQL Serverでは、結合方法を -ネスト化ループ結合 -マージ結合 -ハッシュ結合 から選択できる。 *特徴 [#x6a7e92c] 三つのアルゴリズムは,一般的に >ネスト・ループ結合 < マージ結合 < ハッシュ結合 の順で高速(ハッシュ結合が最速)。 ただし、以下のケースでは、必ずしもこの順番にならない。 -二つのテーブルのレコードの数が極端に違う場合 -両方のレコードの数が十分小さいとき -検索条件に合致した1レコードを早く返したい **ネスト化ループ結合 [#j08ad2b5] -単純に二重ループを回してテーブルを結合する方法 -インデックスが設定されていない小さなテーブルと~ インデックスが設定されている大きなテーブルの二つを結合する場合に効果的 **マージ結合 [#oda2aa11] -ネスト・ループ結合の改良版 -二つのテーブルの結合フィールドをあらかじめソート。 -ソート結果の結合フィールドのポインタを上から下へと順に走査。 -これによって、レコードの走査が1回で済む。 **ハッシュ結合 [#fcfd71b0] -ネスト・ループ結合の改良版 -ハッシュ結合は高速だが、 --ハッシュ テーブルを作成するため、 --元のテーブルのサイズが大きい場合、~ ハッシュ テーブルがメモリを大量に消費することがある。 *監視方法 [#uba6b518] この場合、[[パフォーマンス カウンタ]]を使用して監視を行う。 この場合、 -SQL Server:Buffer Manager:Free pages のカウンタ値が低く、 -SQL Server:Buffer Manager:Stolen Page Count -SQL Server:Buffer Manager:Memory Grants Pending のカウンタ値が高いという状態になる。 *対策方法 [#d9ecefae] この状態では、SQL Serverのメモリ不足が発生する可能性がある。 この場合、 -「ネスト化ループ結合」に変更できる -「ハッシュ結合」を使用している クエリを探すことに重点を置く。 結合方法の見分けるには、実行プランを確認する。 *参考 [#ba1567a7] 詳細は、以下のURLを参照のこと。 -PASSJ & SQL Server Developer Center ジョイントコラム~ https://msdn.microsoft.com/ja-jp/library/Cc707301 --第 2 回 「クエリの実行方法を理解する」~ システム構築 ~~ http://msdn.microsoft.com/ja-jp/library/cc707362.aspx -特集:基礎から理解するデータベースのしくみ~ 基礎から理解するデータベースのしくみ(4):ITpro~ http://itpro.nikkeibp.co.jp/article/COLUMN/20060111/227102/ ---- Tags: [[:データアクセス]], [[:SQL Server]], [[:障害対応]], [[:性能]]