1

状況 1

Table 'lead_transaction'. Scan count 10, logical reads 394, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'appt_master'. Scan count 20, logical reads 4532, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

状況 2

Table 'lead_transaction'. Scan count 36466, logical reads 117088, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'appt_master'. Scan count 36466, logical reads 195492, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

状況 1では、クエリが 4 秒で実行され、左結合が使用されます

&

状況 2 では、クエリが 3 秒で実行され、外部適用が使用されていますが、論理読み取りが非常に高くなっています。

では、性能的には何が良いのでしょうか?

4

1 に答える 1

1

論理読み取りはデータ キャッシュ (メモリ) からのものであるため、多くの読み取りがあるという事実はほとんど違いがないと思います。最初のクエリが小さなチャンクで大量のデータを読み取る場合は、2 番目のクエリの方が効率的であるように思われます。クエリはデータを大きなチャンクで読み取ります。

論理読み取りではなく物理読み取りを行っている場合、パフォーマンスがどのように機能するかを確認したいと思います。

各クエリを実行する前にバッファと実行計画をクリアしてみて、パフォーマンスがどのようなものかを確認してください。

•DBCC DROPCLEANBUFFERS clears buffer pool
•DBCC FLUSHPROCINDB clears execution plans for that database
于 2014-03-27T09:37:02.213 に答える