首页 > 解决方案 > 来自 MS-SQL-Server 2019 的奇怪“缺少索引”建议

问题描述

SSMS 执行计划给出错误消息“缺少索引”并建议我创建一个包含 10 个字段的长索引:

在此处输入图像描述

创建这么长的索引真的有意义吗?

索引建议还包含所有数值字段。我从不通过数字字段访问表格。

标签: sql-serversql-server-2019

解决方案


索引键中只有 1 列。这很轻。

建议索引的包含子句中几乎有 10 列。

为了提高效率,仅索引查找的列(在您的情况下为 SPTAG)并不是一个好的选择,因为数据库引擎需要访问 2 个数据结构:

  1. 首先读取(在索引中查找)以查找在谓词下合格的候选行
  2. 第二次读表找到索引没有的列

但是,如果索引获得了查询的每个子句(SELECT、JOIN/ON、WHERE、GROUP BY、HAVING、ORDER BY)所需的所有列,那么将只有一个数据结构用于提供完整的结果数据集。

优化器将两次读取的成本与扫描表等其他策略的成本进行比较。如果扫描的成本较低,则不会使用索引……因此,给定索引的推荐策略是将所有数据都包含在其中!


推荐阅读