「[[マイクロソフト系技術情報 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を参照のこと。

-第 2 回 「クエリの実行方法を理解する」~ システム構築 ~~
-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]], [[:障害対応]], [[:性能]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS