你如何确定100%的消费?

时间:2013-01-11 16:43:04

标签: sql-server

执行计划总是产生100%的结果,那么是否有一个经验法则,哪个部分是您想要最高百分比的部分?

例如,如果我执行SELECT语句,我可以看到

03% Hash Match
02% Hash Match
10% Hash Match
01% RID Lookup
09% RID Lookup 
04% Index Seek
07% Index Seek (Nonclustered)
01% Clustered Index seek
18% Clustered Index seek
35% Key lookup (Clustered)
01% Nested Loops 

你明白了。如果我离开一两个人,请原谅我。所以我的问题是:那是好还是不好?如果我使用SELECT语句,我确定统计信息会改变,但它们总是会加起来,所以我不知道哪个类别的百分比最高。

1 个答案:

答案 0 :(得分:4)

没有真正的目标,比如说,“将100%推向聚集索引寻求”,但你应该做的是专注于最昂贵的运营商,并试图提高它们的效率。当然,如果查询首先表现出性能问题。在任何查询计划中总会有一个“最昂贵”的运营商 - 但整体查询的成本是多少?你是否花时间在最重的击球手身上?你怎么知道的?或者你是在看那个35%的运算符并尝试从已经运行2ms的查询中挤出额外的纳秒?

此外,不要依赖估计的执行计划;生成实际计划(其中还包含有关估算的信息,让您了解SQL Server可能有多远)。

针对您的具体案例的一条评论:您希望尽力摆脱任何RID或密钥查找。这意味着可能会将堆积索引添加到堆中(您是否拥有堆的有效用例?),并可能使用聚簇索引添加或更改表上的现有索引。

我强烈建议你抓住Grant Fritchey的免费电子书,SQL Server执行计划:

http://www.sqlservercentral.com/articles/books/65831/

我还强烈建议您下载SQL Sentry Plan Explorer并尝试一下。与SSMS showplan相比,有几个优点可以帮助您更快地识别和修复计划问题:

  • 色标是最昂贵的运营商
  • 显示CPU,I / O或两者的成本细分
  • 始终获得%右(many cases SSMS adds to way more than 100%
  • 在交易所显示更有意义的信息(更确定的线宽,显示行数或数据大小,无需查看工具提示)
  • 突出显示估算行数与实际行数之间的差异
  • 突出显示昂贵的运算符,例如查找(并识别索引中缺少的列)
  • 在生成实际计划时,我们包括运行时指标,如CPU /持续时间/读取
  • 还有很多其他功能我不会在这里...

免责声明:我为SQL Sentry工作