web-dev-qa-db-ja.com

2つのクエリを比較する方法は?

2つのクエリXとYを比較して、小さなケースのシナリオで両方にほぼ同じ時間がかかる場合、XがYよりも優れていると言うにはどうすればよいですか?

問題は、非常に大きなデータベースで実行することになっている2つのクエリがあるため、実行して評価することはまったくオプションではないということです。そのため、いくつかのテストを実行するために小さなデータベースを作成しました。テストベースでは、ほぼ同じ時間(約5分)で実行されるため、どちらのクエリが優れているかを評価することは問題です。戻るのにかかる時間の他に、クエリがどれだけ優れているかを測定する別の方法は何ですか?

22
User7354632781
SET STATISTICS IO ON
SET STATISTICS TIME ON

クエリを実行し、さまざまなテーブルと実行時間の論理読み取りを比較します。

37
Joe Stefanelli

すでに述べたように、実行計画を確認してください。

重要なのは、各実行の間にキャッシュをクリアして2つのクエリを公平に比較​​し、すでにキャッシュされているデータの影響によって結果が歪んでいないことを確認することです(本番サーバーでは実行しないでください)。

DBCC DROPCLEANBUFFERS -- clear data cache
DBCC FREEPROCCACHE -- clear proc plan cache

次に、私が通常行うことは、比較のために読み取り、書き込み、CPU、および期間をチェックすることです。

本番レベルのデータボリュームでテストすることは非常に重要です(理想的には、それがどのように拡張されるかを確認するためにさらに大きくなります)。パフォーマンスの違いが実際に見られるのは、これらのボリュームです。少量のデータでテストすると、後で問題が発生する可能性があります。

6
AdaTheDev

クエリプランを調べましたか?クエリが同じデータを返し、実行に同じ時間がかかる場合、クエリプランはほぼ同じであり、2つのクエリ間に意味のある違いはないということです。

また、データベースのサイズが変わるとクエリの実行が異なることを考慮しましたか?

コードを時期尚早に最適化しているのではないかと思います。私の考えでは、機能し、理解できるクエリがあれば、インデックスを使用してパフォーマンスの問題に対処できます。そして、それは通常、パフォーマンスを向上させるためにクエリを変更するよりも簡単です。

2
Jeff Siver

大幅に異なるデータセットでクエリのパフォーマンスを評価することは、一般的にほとんど意味がありません。クエリプランとその効率は、データ統計によって大きく異なります。

したがって、現実的な見積もりを取得するには、「実際の」データベースにできるだけ近いデータベースが必要です。何よりも、「大きなデータベース」のコピーを取り、それに合わせてクエリを調整します。

0
VladV