对于“大”表,是否有任何理由不对可选列的索引进行过滤?
所以对于列 AAA 的索引(因为人们可以在 AAA 上搜索),
我可以将过滤器设置为([AAA] IS NOT NULL)
.
这样可以节省存储空间,因此可以节省资金。
technet的更多优势:
- 提高查询性能和计划质量
- 降低索引维护成本
- 降低索引存储成本
人们说最好对大部分为空的列的索引进行过滤。但是为什么我不对空列的索引进行过滤,比如 1% 呢?如果它只有优点,有什么理由不做吗?
对于“大”表,是否有任何理由不对可选列的索引进行过滤?
所以对于列 AAA 的索引(因为人们可以在 AAA 上搜索),
我可以将过滤器设置为([AAA] IS NOT NULL)
.
这样可以节省存储空间,因此可以节省资金。
technet的更多优势:
人们说最好对大部分为空的列的索引进行过滤。但是为什么我不对空列的索引进行过滤,比如 1% 呢?如果它只有优点,有什么理由不做吗?
这通常是一个好主意,有两个陷阱:
select distinct col from T
不会使用索引,因为可能会找到空值。使用这个:select distinct col from T where col is not null
。过滤后的索引没有得到充分利用。它们甚至可以用来使可为空的列唯一。
我的实用建议:尝试几个月,如果有其他不可预见的问题,请自行学习。
如果您喜欢高级 SQL Server 查询技术,还可以查看广告索引视图。它们是一组超级过滤索引(至少在 Enterprise 上)。
所有指标都有优点和缺点: 缺点:
好处:
所以像往常一样,这取决于。
有些人因为真正了解他们关于索引的知识而过上了很好的生活:这里有非常好的东西http://www.insidesqlserver.com/
因此,这取决于用户返回索引引用的数据的频率与他们更新通过索引包含的数据的频率。
稀疏列的索引没有什么不同,但是在列(大部分)为空的情况下,过滤索引更有效。一旦备用性降低(例如 50/50),那么当优化器决定返回数据的最佳计划时,数据的分布就会变得非常重要。过滤后的索引不会知道过滤器之外的数据分布 - 有点明显,但需要说明。