Pab*_*lla 5 indexing performance null datetime sql-server-2008
我有一个与其他任何东西无关的简单表.它有一个非PK列,它是一个日期.我已经为该列创建了一个非聚集索引.如果我进行此查询:
select*from table,其中datecolumn不为null < - 不使用索引并且非常慢.
但是,如果我删除not,就这样:select*from table,datecolum为null < - 使用索引并且非常快.
还有更多不是空值而不是空值.
我忘记了什么吗?我可以在这里使用过滤索引吗?
提前致谢.
这个是正常的。除非谓词的选择性足以保证它,否则它不会使用索引。
听起来绝大多数记录都不为 NULL,因此不必通过非聚集索引查找这些记录,而是必须进行大量书签查找和随机 I/O 来检索其余列以返回,这样更快、更高效只需扫描整个聚集索引。
你可以用它FORCESEEK来强制你所说的你想要的行为。您可能会发现与聚集索引扫描相比,所花费的时间和 I/O 统计数据飞速增长。
SET STATISTICS IO ON
SELECT * FROM
YourTable WITH (FORCESEEK)
WHERE YourCol IS NOT NULL
Run Code Online (Sandbox Code Playgroud)