ここから本文です

inner loop join って?

rtr********さん

2010/1/2118:09:48

inner loop join って?

SQL Server 2005でストアドプロシージャを解析していたのですが、
その中に「inner loop join」というものが出てきたのですが、
これはどういう意味ですか?

「inner join=内部結合」というのは解ります。
何か指定されたテーブルの繰り返し処理でも行っているのでしょうか?

ググって見たのですが、それらしい解説が見当たりませんでした・・・

閲覧数:
5,076
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

gar********さん

編集あり2010/1/2219:12:14

結合ヒント、というやつです。
つまり、SQLの基本構文ではありません。
http://msdn.microsoft.com/ja-jp/library/ms173815(SQL.90).aspx

使う側は単に"INNER JOIN"と書きさえすれば、2つのテーブルを結合したデータが返ってきますが、SQL Serverの方ではそれを返すためにいろいろなアプローチで内部的に2つのテーブルのデータをひっ付けているわけです。
(Nested Loop結合、Merge結合、Hash結合の3つが代表的な方法です)
どの方式が一番効率がよいかは、SQL Server自身(オプティマイザ)があるルールに基づいて決定してくれています。

結合ヒントをつけるということは「SQL Serverが処理するときにシステム内部でどの方法で結合処理を行うか強制する」ということです。
INNER LOOP JOINと書くことにより、「Nested Loop結合で処理しなさい、とSQL Serverに注文をつけている」のです。
(ちなみに2つのテーブルのうち1つからデータを読み出し、もう1つをぐるっと一周検索して結合していく方式で、一般的には対象のデータ量がそれほど多くない場合向けです)

通常は対象のデータ量が多くなると別の方式の方がコストがかからないとSQL Serverが判断し、「Merge結合」や「Hash結合」を採用することがあります。その場合でもこのヒントがあればNested Loop結合になります。

おそらく何らかの理由(データの特性もしくは統計不十分など)によって、SQL Server 2005のオプティマイザの選択する結合プランが信用できないケースでこういうヒントを切っているのでしょう。不利益も多いので、普通はやらないです。

質問した人からのコメント

2010/1/24 20:27:42

降参 良く分かりました。
事細かなご説明ありがとうございます。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる