我有一个与其他任何表都不相关的简单表。它有一个非 PK 列,它是一个日期。我已经为该列创建了一个非聚集索引。如果我提出这个查询:
select * from table where datecolumn is not null
但如果我删除 not,这样:
select * from table where datecolum is null
非空值比空值多得多。
我是不是忘记了什么?我可以在这里使用过滤索引吗?
提前致谢。
这个是正常的。除非谓词的选择性足以保证它,否则它不会使用索引。
听起来绝大多数记录都不为 NULL,因此不必通过非聚集索引查找这些记录,而是必须进行大量书签查找和随机 I/O 来检索其余列以返回,这样更快、更高效只需扫描整个聚集索引。
您可以使用FORCESEEK
强迫你做出你所说的你想要的行为。您可能会发现与聚集索引扫描相比,所花费的时间和 I/O 统计数据飞速增长。
SET STATISTICS IO ON
SELECT * FROM
YourTable WITH (FORCESEEK)
WHERE YourCol IS NOT NULL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)