概要
■通常は... 最適と思われる実行プランを、オプティマイザが選んでデータアクセスしてくれる 【問題点】 * オプティマイザは、必ずしも完璧じゃない →オプティマイザに対し、強制的に意図した実行プランを作成する必要がある。 【問題解決策】 * 「クエリヒント」を使うといい
クエリヒントの種類
http://msdn.microsoft.com/ja-jp/library/ms181714.aspxhttp://msdn.microsoft.com/ja-jp/library/aa196160.aspx
FORCE ORDER
* from 句に記述したとおりに強制的に結合する →つまり、クエリの構文に記述したとおりの順番でテーブルを結合する
使用体験談
http://go4it.seesaa.net/article/136686716.htmlhttp://handcraft.blogsite.org/blog/2011/06/11/263
参考文献
http://codezine.jp/article/detail/1629?p=2EXPAND VIEWS
* インデックス付きビューが使用されないようにする
参考文献
http://technet.microsoft.com/ja-jp/library/cc917715.aspxhttp://msdn.microsoft.com/ja-jp/library/ms181151(v=sql.105).aspx
HASH JOIN
* 強制的に、HASH結合にする * From SQL Server2005
結合アルゴリズムについて
http://itpro.nikkeibp.co.jp/article/COLUMN/20060111/227102/より抜粋 一般的に言って、ネスト・ループ結合<マージ結合<ハッシュ結合の順で高速になります(ハッシュ結合が最速)。 ・・・中略・・・ テーブルの内容や処理の目的などに応じて最適なアルゴリズムは変わります。 ヒントを使って結合アルゴリズムを明示的に指定するなどして、状況に応じて使い分けるようにしてください。
使用体験談
http://d.hatena.ne.jp/iad_otomamay/20080626/p1http://d.hatena.ne.jp/iad_otomamay/20080121/p1
参考文献
http://ottan.blog71.fc2.com/blog-entry-643.htmlFORCESEEK
http://msdn.microsoft.com/ja-jp/library/bb510478(v=sql.105).aspxより * インデックスのシーク操作のみを使用するようにクエリ オプティマイザを設定できる * From SQL Server2008
サンプル
■使用例1 SELECT * FROM sampleTable WITH(FORCESEEK) WHERE id > 19000; ■使用例2 SELECT * FROM sampleTable WHERE id > 19000 OPTION(TABLE HINT(table1, FORCESEEK)); ■使用例3 SELECT * FROM sampleTable(FORCESEEK) WHERE id > 19000;