假设我们有一个这样的表定义:
CREATE TABLE MyTab ( ID INT IDENTITY(1,1) CONSTRAINT PK_MyTab_ID PRIMARY KEY ,GroupByColumn NVARCHAR(10) NOT NULL ,WhereColumn DATETIME NULL )
和这样的过滤非聚集索引:
CREATE NONCLUSTERED INDEX IX_MyTab_GroupByColumn ON MyTab (GroupByColumn) WHERE (WhereColumn IS NULL)
为什么这个索引没有“覆盖”这个查询:
SELECT GroupByColumn ,COUNT(*) FROM MyTab WHERE WhereColumn IS NULL GROUP BY GroupByColumn
我得到这个执行计划:
KeyLookup 用于 WhereColumn IS NULL 谓词。
没有很好的理由。这是该查询的覆盖索引。
请在此处为反馈项目投票:https ://feedback.azure.com/d365community/idea/ffbf409a-5125-ec11-b6e6-000d3a4f0da0
作为一种解决方法WhereColumn,在过滤后的索引中包括:
WhereColumn
CREATE NONCLUSTERED INDEX IX_MyTab_GroupByColumn ON MyTab (GroupByColumn) include (WhereColumn) WHERE (WhereColumn IS NULL)