SQL クエリが最高の状態で実行されているかどうかを確認する方法はありますか? SQL Server 2008 を使用しています。たとえば、クエリが予想されるインデックスにヒットするかどうかを知りたいです。
3 に答える
はい、「実際の実行計画」を含めてください。これは、SQL Management Studio の [クエリ] メニューにあります。実行計画は、クエリが使用する結合とインデックスの種類を示します。
実行計画を使用してクエリをプロファイリングします。詳細については、このチュートリアルを参照してください: http://www.simple-talk.com/sql/performance/execution-plan-basics/
チャップスはすでに実行計画を分析することを提案していますが (そして当然のことです!)、MSSMS で実行計画に慣れていない人にとってはもう少し使いやすい別の方法があります。 Query in Database Tuning Advisor" - アドバイザが開き、データベース選択タブが開くまで待ちます。開いたら、クエリが対話するデータベースを選択し、[分析の開始] をクリックします。
これにより、すべてのテーブル、結合などの大まかなチェックが行われ、実行計画が分析され、どのインデックスがクエリの高速化 (つまり、テーブル スキャンの回避) に「役立つ可能性がある」かがわかります。
ただし、提案されていることをやみくもに受け入れないでください。最初にデータベースのバックアップを取り、アナライザーを実行します。推奨事項を適用し、クエリのパフォーマンスが向上した場合はベンチマークを実行します。すすぎと繰り返しを行ってください。
たとえば、クエリが大きなテーブルを読み取っている場合、チューニング アドバイザーは、多くのディスク容量を消費するが、わずかな速度向上しか得られないインデックスの作成を提案することに気付くかもしれません。これは、質問をする必要がある場所です。 "その価値はありますか?" – これが、通常、アナライザーの提案を試してみることをお勧めする理由です。
テストの合間に、キャッシュをクリアして、正確な結果が得られるようにしてください。
DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
また、より正確なベンチマークを行うにはSET STATISTICS TIME ON;
、MSSMS 内のカウンターに依存しないでください。遅延が発生することがあります。