【发布时间】:2015-02-07 16:12:19
【问题描述】:
从性能调优的角度来看,哪个更重要?
假设一个查询报告了一个包含大约 200 万条记录的表的 30 次扫描和 148 次逻辑读取。
同一查询的修改版本报告了 1 次扫描和 1400 次逻辑读取。第二个查询执行的 CPU 时间减少了大约 40 毫秒。第二个查询更好吗?
我认为是这样,这是我的论文:
在第一种情况下,我们对一个非常大的表进行了大量扫描。这对 CPU 和服务器内存的开销很大,因为表中的所有行都必须加载到内存中。执行这样的查询数千次将消耗服务器资源。
在第二种情况下,即使我们累积了更多的逻辑读取,我们的扫描也更少。由于逻辑读取有效地对应于从缓存中读取的页面数量,因此这里的瓶颈将是网络带宽,将结果返回给客户端。在这种情况下,SQL Server 要做的实际工作更少。
你有什么想法?
【问题讨论】:
-
Stack overflow 是一个问答网站,因此这个问题不合适,因为它可能会产生基于辩论和意见的答案。
-
确保在运行查询之前执行
DBCC DOPCLEANBUFFERS,以便使用冷缓冲区缓存测试查询。否则,物理计数扫描的结果会产生误导。 -
@GB,我不认为这是一场辩论。当然有一种推荐的方法来进行数据库优化,这就是我正在寻找的。span>
标签: sql-server tsql query-performance