2012-03-26 22 views
4

SQL Server 2008でいくつかのSQLクエリの効率を向上させるために取り組んでいます。各クエリを実行するさまざまな方法があり、それらの中で最速のものを探したいと思います。複数のSQLクエリでのパフォーマンスのテスト

しかし、私が問題になっているのは、どちらが実際に高速に実行されているかを判断することが難しいということです。理想的には、各クエリーを順番に実行して、どちらが最速に実行されるかを知ることができます。理想的には...

問題は、SQLは私の好みにあまりにもスマートなのですか?これらのクエリを構築するとき、私はそれらを複数回実行します。これを行うと、クエリの効率が向上します。これは私が描いたのは、SQLの背後にあるものがあるからです。これは何ですか?どうすればそれを避けることができますか?

たとえば、クエリを1回実行すると30秒かかります。私は再びそれを実行し、それは10秒かかる。クエリを実行するほど実行速度は速くなります。

です。「キャッシュをクリアする」という方法や、SQLに相当するものはありますか?私はどのクエリが実際により速く実行されるのかを正確に示すことを望みます。あるいは、私が望むテストのタイプを実行する最良の方法は何でしょうか?

このトピックに関する情報は、有効な入力として受け入れられます。

+0

これらのクエリをコードで「構築」してから、それらもコードから呼び出すのですか? – Icarus

+0

はい@イカルス。私はSQL Serverのクエリウィンドウからクエリを実行して実行しています。 – ImGreg

+0

SET STATISTICS IO ONを使用すると、クエリの持続時間(多くの要因に依存します)に頼るのではなく、実際の実行計画と同様に品質情報を生成できます。 –

答えて

8

クエリが最初に実行されると、データがまだディスクに残っている可能性が最も高いため、SQlサーバーはこのデータをフェッチしなければなりません。同じクエリを実行すると、データはRAMに既に保存されています。

実行DBCC DROPCLEANBUFFERSDBCC FREEPROCCACHE

あなたは実行計画を見る必要があり、再起動を行わずにキャッシュをクリアするには、統計はIOと統計時間は、実際に起こっているかを確認します。計画の中でコンバージョンを探したりスキャンしたりすることができます(可能ならシークしたい)。

も参照してくださいClient Statistics in SSMS. Check execution times

+0

ライブデータベース@DarrenDaviesでこれを使用することに心配すべきことは何ですか?私は残念なことにテストコピーを作成できません。 – ImGreg

+1

はい。ライブDBでこれを実行しないでください。すべてのデータを再度フェッチする必要があります。また、procsは再コンパイルされます – SQLMenace

+0

、ライブデータベースにアクセスできる場合は、 – ImGreg

0

は、実際の実行計画を含めて、次のコマンドを実行します。

CHECKPOINT; 
GO 
DBCC DROPCLEANBUFFERS; 
GO 
1

ご覧速度の向上は、データベースのクエリキャッシュの結果です。ほとんどのリレーショナルDBエンジンには、読み取ったテーブルが更新されるまでクエリの結果をキャッシュするこの機能があります。

This postは、パフォーマンスチューニングのためにこれを回避する方法についての良い指針を提供します。 Execution Plansには、データベースを実際に実行せずにクエリを実行する方法が示されています。これの利点は、索引を代わりに使用できる場所で完全な表スキャンが実行されているかどうかを確認できることです。

関連する問題