考虑一个带有位列的表,指示对象是处于活动状态还是非活动状态,其中大多数项目处于非活动状态(已关闭)。
我的理解是,由于此列(2)的不同值的数量有限,SQL引擎发现执行表扫描以查找打开的项而不是尝试索引位列更有效。
SQL 2008有一项新功能,允许对索引进行过滤。在不了解它的内部结构的情况下,我会假设索引只有在满足过滤条件时才包含对记录的引用,并且这种方法将提供一种有效的方法来检索所有活动记录,而不必诉诸于拆分活动记录到单独的表或分区中。
我曾经将开放记录记录的主键放入一个表中,用于标识活动记录,然后将主表连接到此“活动列表”表以仅返回活动记录。
在这种情况下,为什么使用过滤索引不合适是否有任何理由?
答案 0 :(得分:3)
Active
位字段上的过滤索引是有效选择。
您可能希望为其添加特定的UPDATE STATISTICS 特别是过滤的索引(特别是在易失性数据上) 用FULLSCAN更新他们的统计数据。好消息是他们是 可能是较小的索引(因此更容易/更便宜 要更新的统计数据)
这是因为更新统计信息阈值基于基础列而不是仅基于过滤的索引值。
Ref。