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

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

如果它进行物理读取而不是逻辑读取,我有兴趣了解性能将如何工作。

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

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