执行计划总是产生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语句,我确定统计信息会改变,但它们总是会加起来,所以我不知道哪个类别的百分比最高。
答案 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相比,有几个优点可以帮助您更快地识别和修复计划问题:
免责声明:我为SQL Sentry工作