【发布时间】:2010-12-20 17:15:03
【问题描述】:
我想了解 SQL Server 2008 过滤索引功能。
数据库引擎如何处理这个概念?在查询大型表时,它如何帮助我获得比标准索引更快的结果?
有人可以帮我吗?
谢谢。
【问题讨论】:
标签: sql sql-server-2008 indexing
我想了解 SQL Server 2008 过滤索引功能。
数据库引擎如何处理这个概念?在查询大型表时,它如何帮助我获得比标准索引更快的结果?
有人可以帮我吗?
谢谢。
【问题讨论】:
标签: sql sql-server-2008 indexing
这是索引上的 WHERE 子句。
我对一百万行表的现实生活计划:
我需要在表中的列上建立索引,但 90% 的值是 NULL。我需要 10% 非空的索引,但索引因 90% NULL 而膨胀。所以我添加过滤器并节省空间。
我想使同一列唯一(eq 仅在非空值上唯一)。在 SQL Server 2008 之前,我不得不使用索引视图或代码。现在,“WHERE”允许我通过索引强制执行唯一性
【讨论】:
我发现将过滤索引概念化的最简单方法是对其进行约束的索引,它只允许某些值进入索引。
如果您的查询要求的值都在约束范围内,那么引擎知道它可以使用过滤后的索引,而不是恢复到另一个索引/基础表。如果您要求超出约束的值,则不会使用过滤后的索引。
就它如何使您的系统更快而言,该索引可以非常有针对性,并且与相同值上的等效 NC 索引相比,总体上将占用更少的页面。这基本上可以减少 I/O 并提高速度。即使是寻找过滤索引的索引,您也更有可能获得该索引的页面缓存命中,因为过滤索引仅包括您感兴趣的行(理论上)由于约束。
如果您的数据分布和查询不遵循定义的使用模式,则很难让这些为您工作,但在您有很多您从不感兴趣的空值的情况下,可以设置过滤索引例如,最多只包含非空值。
【讨论】: