- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 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: SQL Statistics:SQL Compilations/sec
のカウンタ値が低く、
-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]], [[:障害対応]], [[:性能]]