相关疑难解决方法(0)

优化程序将忽略筛选的索引条件

假设我正在运行一个显示有趣猫图片的网站.我有一个名为表CatPictures与列Filename,Awesomeness以及DeletionDate和以下指标:

create nonclustered index CatsByAwesomeness
on CatPictures (Awesomeness) 
include (Filename)
where DeletionDate is null
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:

select Filename from CatPictures where DeletionDate is null and Awesomeness > 10
Run Code Online (Sandbox Code Playgroud)

作为一个人,我知道上面的索引是SQL Server所需要的,因为索引过滤条件已经确保了该DeletionDate is null部分.

但是SQL Server不知道这个; 我的查询的执行计划将不使用我的索引:

查询计划,进行表扫描

即使添加索引提示,它仍将DeletionDate通过查看实际的表数据进行显式检查:

查询计划使用索引,但仍然执行书签查找

(并且还抱怨缺少的索引DeletionDate).

我当然可以

include (Filename, DeletionDate)
Run Code Online (Sandbox Code Playgroud)

相反,它会工作:

包含DeletionDate的索引的查询计划;  使用此索引

但是包含该列似乎是浪费,因为这只会占用空间而不添加任何新信息.

有没有办法让SQL Server意识到过滤条件已经在检查工作DeletionDate

indexing sql-server-2008 filtered-index

20
推荐指数
1
解决办法
2702
查看次数

标签 统计

filtered-index ×1

indexing ×1

sql-server-2008 ×1