0

クエリ アナライザを使用してテーブルのインデックスのパフォーマンスを比較するにはどうすればよいですか?

推定実行計画で同じクエリを 2 回 (1 回はインデックスを使用し、もう 1 回はインデックスを使用せずに) 実行し、生成されたテーブル スキャン/インデックス スキャンを適切に比較したいと考えています。

CREATE INDEX...、SELECT...、DROP INDEX...、SELECT を試しました。最初のクエリではインデックスを使用し、2 番目のクエリではインデックスを使用しないと予想されますが、両方の実行プランでインデックスが使用されます。

4

4 に答える 4

3

インデックスがない場合は使用できません。ただし、2 番目の選択の推定実行計画のインデックスはまだ存在するため、評価されます。DROP INDEXプランもあくまでも目安です

とにかく、実際の実行計画を使用します。個人的には推定された計画が好きではないからです。

SET SHOWPLAN TEXTを使用して、クエリ ウィンドウで実際に使用されているものを取得できます (またはグラフィカル ウィンドウを使用します) 。SET STATISTICS IOも使用し、多くの場合SET STATISTICS TIMEも使用します。

于 2009-10-07T04:16:44.497 に答える
2

Use the Sql Server Profiler under configuration tools. Run your queries with and without indexing and record the data reads / writes timing etc of your function calls. This should give you a clear idea if your indexes have improved performance (less reads / latency etc.)

于 2009-10-07T00:45:22.007 に答える
1

クエリ ウィンドウの先頭でこれを使用します。プランのキャッシュがクリアされます。

dbcc freeproccache
go
dbcc dropcleanbuffers
go

それを一番上に置き、dreat and drop index コードをコメントに入れ、次にクエリを入れます。最初はインデックスなしで実行し、それがどのように見えるかを確認してから、インデックスを作成して再実行します。

はい、実際の実行計画を使用し、クライアント統計を使用することもできます。

于 2009-10-07T20:54:40.903 に答える
1

最終的にうまくいった手法は、FROM 句で WITH キーワードを使用することでした。

索引の作成時:

SELECT * FROM table WHERE ...

SELECT * FROM table WITH (INDEX(0)) WHERE ...

最初のクエリは (おそらく) インデックスを使用しますが、2 番目のクエリは使用しません。次のような複数のインデックスを使用することもできます。

SELECT * FROM table WITH (INDEX(IX_test1)) WHERE ...

SELECT * FROM table WITH (INDEX(IX_test2)) WHERE ...
于 2009-12-10T00:46:00.483 に答える