SQL Server 2008筛选的索引

时间:2009-11-26 14:47:37

标签: sql sql-server-2008 indexing

我想了解SQL Server 2008过滤索引功能。

数据库引擎如何处理这个概念?在查询大型表时,它如何帮助我获得比标准索引更快的结果?

有人可以帮我吗?

感谢。

2 个答案:

答案 0 :(得分:8)

你的索引是WHERE子句。

我的现实生活计划为一百万行表:

  • 我需要一个表中列的索引,但是90%的值都是NULL。我需要10%非null的索引,但索引是90%NULL的膨胀。所以我添加过滤器并节省空间。

  • 我想要使同一列唯一(仅在NON-null值上使用eq)。在SQL Server 2008之前,我不得不使用索引视图或代码。现在,“WHERE”允许我通过索引强制执行唯一

答案 1 :(得分:3)

我发现概念化过滤索引的最简单方法是对其进行约束的索引,它只允许某些值进入索引。

如果您的查询要求所有属于约束的值,则引擎知道它可以使用过滤的索引而不是恢复到另一个索引/基础表。如果要求约束之外的值,则不会使用过滤的索引。

就如何使您的系统更快速而言,索引可以非常有针对性,并且与相同值的等效NC索引相比,整体占用的页面更少。这基本上可以减少I / O并提高速度。即使是索引Filtered索引的索引,您也更有可能获得索引的页面缓存命中率,因为过滤后的索引仅包含您(理论上)由于约束而感兴趣的行。

如果您的数据分发和查询不遵循已定义的使用模式,那么将更难以使这些工作,但在您有大量空值的情况下,您永远不会感兴趣,那么可以设置过滤的索引例如,最多只包含非空值。

相关问题