IT *_*her -1 performance sql-server sql-server-2008-r2 query-performance
比较查询性能时应该检查哪些因素?
我看到很多关于 IO 成本、子树成本(通过使用执行计划)、CPU 时间、运行时间(通过使用 set statistics time on)、运行查询所需的时间等统计信息的文章。
我见过一些具有高子树成本但执行速度快的查询。所以我想知道在检查查询性能时我必须考虑哪些因素。
子树成本不是一个好的通用指标。即使在实际计划中,显示的成本也是基于估计的,并且可能会出现不准确的基数估计。
即使基数估计是完美的,但是所显示的成本仍然只是从成本计算公式得出的,可能与真实的实际性能几乎没有关系。某些构造(例如标量 UDF)在计划中通常被严重低估。
逻辑读取可能是一个非常有用的指标,但并非所有逻辑读取都是相同的。读取已经在缓存中的页面上的一行显然比读取需要从磁盘引入的页面上的所有行便宜得多。另一个需要注意的问题是工作表的逻辑读取报告的是读取的行而不是页,因此单位并不总是一致的。
经过的时间是一个有用的指标,但这也需要一些解释。在查看两个查询的经过时间时,您可能更喜欢使用较少资源的经过时间稍长的查询(例如,较低的内存授予或串行计划而不是并行)