症状
假设您使用的是 Microsoft SQL Server 2014。 您可能会遇到SQL Server 2014 发行说明中包含的以下两个问题:
-
缺少索引详细信息错误地报告包含内存优化表问题的列: 如果 SQL Server 2014 检测到缺少内存优化表中的查询所缺少的索引,它将在 SHOWPLAN_XML 中报告缺少的索引,以及缺少索引 dmv (如 sys.dm_db_missing_index_details)。 在某些情况下,缺失的索引详细信息将包含包含的列。 由于所有列都隐式包含内存优化表的所有索引,因此不允许显式指定包含内存优化索引的列。
-
缺少索引详细信息如果哈希索引存在但不适合查询问题,则缺少索引: 如果在查询中引用的内存优化表的列上有哈希索引,但该索引不能用于查询,则 SQL Server 2014 不会始终在 SHOWPLAN_XML 和 DMV sys.dm_db_missing_index_details 中报告缺少的索引。尤其是,如果查询包含涉及索引键列子集的相等谓语,或者如果它包含涉及索引键列的不等式谓语,则不能按原样使用哈希索引,并且需要使用不同的索引来有效地执行查询。
原因
出现此问题的原因是,查询优化器中的缺少索引逻辑不会区分基于磁盘的表上的传统非群集索引和内存优化表的新索引类型。
解决方案
在 SQL Server 的以下累积更新中,问题首先已修复。
SQL Server 2014 的累积更新1 /en-us/help/2931693
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
解决方法
要解决这些问题,请使用以下解决方法:
-
问题解决方法:缺少索引详细信息报告包含列的内存优化 tableDo 未指定包含子句和内存优化表中的索引。
-
问题的解决方法:缺少索引详细信息如果哈希索引存在,但不适合使用哈希索引的 queryIn,请检查查询和查询计划以确定查询是否可以从索引键子集上的索引查找操作获得好处,或对不等式谓语执行索引查找操作。 如果需要在索引键的子集上查找,请使用非聚集索引,或在需要查找的列上使用哈希索引。 如果你需要查找不等谓词,请使用非哈希索引。
注意 解决方法来自 SQL Server 2014 发行说明
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。