当您完成编写查询/存储的proc /函数时,最快速获取一些性能参数的最有用的方法是什么?您是否运行查询并查看实际的执行计划?如果是这样,您要寻找什么?显然,表/索引扫描很成功,但是还有什么呢?
当您完成编写查询/存储的proc /函数时,最快速获取一些性能参数的最有用的方法是什么?您是否运行查询并查看实际的执行计划?如果是这样,您要寻找什么?显然,表/索引扫描很成功,但是还有什么呢?
Answers:
为了进行快速评估,请从SSMS中获取执行计划,然后进入Plan Explorer。
Grant Fitchley的SQL Server执行计划是一个不错的开始,因为那里有许多免费的参考资料。我还发现Joe Chang的博客文章和有关执行计划成本的电子书非常有用。
通常,我要做的只是运行查询,并找出如何针对实际数据执行查询。如果有问题,那么我来看看执行计划。
至于执行计划,Brad McGehee有一篇有趣的文章。
他在信中说:
如果在执行计划中看到以下任何内容,则应考虑它们为警告信号,并调查它们是否存在潜在的性能问题。从性能的角度来看,它们每个都不理想。
* Index or table scans: May indicate a need for better or additional indexes. * Bookmark Lookups: Consider changing the current clustered index, consider using a covering index, limit the number of columns in the SELECT statement. * Filter: Remove any functions in the WHERE clause, don’t include wiews[sic] in your Transact-SQL code, may need additional indexes. * Sort: Does the data really need to be sorted? Can an index be used to avoid sorting? Can sorting be done at the client more efficiently?并非总是可以避免这些情况,但是您可以避免的越多,查询性能就会越快。
SET STATISTICS IO ON
通常,“逻辑读取数”应尽可能低。触摸完成查询所需的页面数越少,计划越好(因为通常会更快),因此对CPU,RAM和磁盘IO的影响较小。
这将在更改索引或SQL重构真正有帮助时为您提供指导。即使使用相同的SQL和查询计划,“毫秒执行时间”也会有所不同-逻辑读取对于任何给定的查询计划将保持一致。
同样,“物理读取”应非常低(并且为零,并在后续执行中保持为零)。如果这样做不这样做,请查看您的SQL Server内存使用情况(页面寿命等)。