SQL Server 是如何生成加起来达到 6,000% 的查询执行计划的?

孔夫子*_*孔夫子 11 sql-server optimization ssms execution-plan sql-server-2012

奇怪的执行计划

今天我在 The Heap 上,正在查看我认为可以改进的查询计划。然而,它创造了一些东西,动摇了我对 SQL Server 查询优化器的信念。如果甚至不能计数到 100%,我还可以信任它吗?

表的特点:

  • 聚集在非标识列上
  • 12 个索引,其中之一是相关date_entered
  • 60,000 条记录
  • 26列不同类型和长度
  • PAGE 压缩表

有没有人以前见过这个,是什么导致计划看起来如此扭曲?


以下来自 SQL Sentry Plan Explorer

SQL Sentry 计划资源管理器 - 图像 顶级运营

Aar*_*and 13

这个错误已经存在多年了,永远不会被修复。我第一次报道它是在 6 年前,但它的存在时间远不止于此。这些只是估计成本,与优化器本身以及您是否可以信任它没有任何关系。这只是 showplan 输出有一些有问题的数学。

解决方案:使用SentryOne 计划资源管理器,它倾向于正确计算(或者只是停止查看估计成本并查看更有意义的指标)。如果您在计划资源管理器中打开此计划,百分比将正确累加。

  • @RichardTheKiwi 这基本上是 ShowPlan 可视化工具所做的一切,只是有时会出错。 (3认同)