更多逻辑读取,但查询执行时间更短

时间:2014-03-04 06:53:16

标签: sqlperformance

情况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秒内执行,使用外部应用,但逻辑​​读取非常高。

那么表现有什么好处呢?

1 个答案:

答案 0 :(得分:1)

由于逻辑读取来自数据缓存(内存),我认为存在大量读取的事实几乎没有什么区别,并且看起来第二个查询在以小块读取大量数据时更有效而第一个查询以大块读取数据。

我很想知道如果它进行物理读取而不是逻辑读取,性能将如何工作。

在运行每个查询之前尝试清除缓冲区和执行计划,看看性能如何。

•DBCC DROPCLEANBUFFERS clears buffer pool
•DBCC FLUSHPROCINDB clears execution plans for that database