マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

SQL Serverでは、結合方法を

から選択できる。

詳細

アルゴリズム

三つのアルゴリズムは,一般的に

ネスト・ループ結合 < マージ結合 < ハッシュ結合

の順で高速(ハッシュ結合が最速)。

ただし、以下のケースでは、必ずしもこの順番にならない。

  • 二つのテーブルのレコードの数が極端に違う場合
  • 両方のレコードの数が十分小さいとき
  • 検索条件に合致した1レコードを早く返したい

ネスト化ループ結合

  • 単純に二重ループを回してテーブルを結合する方法
  • インデックスが設定されていない小さなテーブルと
    インデックスが設定されている大きなテーブルの二つを結合する場合に効果的

マージ結合

  • ネスト・ループ結合の改良版
  • 二つのテーブルの結合フィールドをあらかじめソート。
  • ソート結果の結合フィールドのポインタを上から下へと順に走査。
  • これによって、レコードの走査が1回で済む。

ハッシュ結合

  • ネスト・ループ結合の改良版
  • ハッシュ結合は高速だが、
    • ハッシュ テーブルを作成するため、
    • 元のテーブルのサイズが大きい場合、
      ハッシュ テーブルがメモリを大量に消費することがある。

監視方法

この場合、パフォーマンス カウンタを使用して監視を行う。

この場合、

  • SQL Server:Buffer Manager:Free pages

のカウンタ値が低く、

  • SQL Server:Buffer Manager:Stolen Page Count
  • SQL Server:Buffer Manager:Memory Grants Pending

のカウンタ値が高いという状態になる。

対策方法

この状態では、SQL Serverのメモリ不足が発生する可能性がある。

この場合、

  • 「ネスト化ループ結合」に変更できる
  • 「ハッシュ結合」を使用している

クエリを探すことに重点を置く。

結合方法の見分けるには、実行プランを確認する。

参考

詳細は、以下のURLを参照のこと。


Tags: :データアクセス, :SQL Server, :障害対応, :性能


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-01-27 (月) 13:31:43 (1545d)