SQL筛选索引:我应该总是在可选列的索引上放置一个过滤器吗?

Eri*_*ker 9 sql indexing sql-server-2008 filtered-index

对于"大"表,是否有任何理由不对可选列的索引进行过滤?

因此,对于列AAA的索引(因为人们可以在AAA上搜索),
我可以将过滤器设置为([AAA] IS NOT NULL).
这节省了存储空间,因此节省了资金.

technet的一些优势:

  • 改进了查询性能和计划质量
  • 降低了索引维护成本
  • 降低索引存储成本

人们说最好将过滤器放在一个大多数为空的列的索引上.但是为什么我不会对像1%的空的列的索引进行过滤?如果它只有优势,有没有理由不去做?

usr*_*usr 5

这通常是两个陷阱的好主意:

  1. 表设计师有一个bug(只有Denali!).重建表时,它会删除所有过滤器.
  2. 确保优化器可以静态地告知您的谓词永远不会允许返回空行.通常情况下,这是因为SQL NULL语义(它们只是帮助而不是阻碍的唯一情况).示例:select distinct col from T不会使用索引,因为可能找到空值.用这个:select distinct col from T where col is not null.

过滤的索引被大量使用不足.它们甚至可以用于使可空列成为唯一的.

我的实用建议:试试几个月,如果还有其他不可预见的问题,请自己学习.

如果您使用高级SQL Server查询技术,还可以查看广告索引视图.这是一组超级筛选索引(至少在Enterprise上).