0

执行计划总是产生 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 语句,我确信统计数据会发生变化,但它们的总和总是 100,所以我不知道我希望哪个类别的百分比最高。

4

1 回答 1

4

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

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

针对您的具体情况的一条评论:您想尽您所能摆脱任何 RID 或密钥查找。这意味着可能会向您的堆添加聚簇索引(您的堆是否有有效的用例?),并可能在具有聚簇索引的表上添加或更改现有索引。

我强烈建议您阅读 Grant Friitchey 的免费电子书 SQL Server 执行计划:

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

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

  • 色标最昂贵的运营商
  • 按 CPU、I/O 或两者显示成本明细
  • 总是得到正确的百分比(在许多情况下 SSMS增加了超过 100%
  • 显示更有意义的交换信息(更确定的线宽,并显示行数或数据大小,而无需查看工具提示)
  • 突出显示估计行和实际行之间的差异
  • 突出显示昂贵的运算符,例如查找(并识别索引中缺少的列)
  • 在生成实际计划时,我们包括运行时指标,例如 CPU / 持续时间 / 读取
  • 还有很多其他的功能我不会在这里赘述...

免责声明:我为 SQL Sentry 工作

于 2013-01-11T17:04:13.707 回答