SQL Server:过滤索引与索引视图的区别

3
什么是它们各自的优点?它们似乎都可以限制查询需要搜索的行数和列数,那么选择其中之一的基础是什么?

筛选索引(Filtered Index) 需要一个相当简单的 条件(condition) 才能实现,而一个索引视图(Indexed View) 则有一个相当广泛、长的前提条件必须满足。索引视图也不是为了减少行数 - 它是为了通过持久化和索引视图显示的数据来加速(大多数 SELECT)对该视图的查询。 - marc_s
2个回答

4
一个索引视图:
  • 可以包括基于表达式的列。

  • 可以包括多个表的连接。

  • 可以直接在用户SQL语句中引用。

  • 允许所有确定性表达式。

  • 具有复杂的先决条件,但使用起来简单一致(从 [indexedview] 中选择*)。

一个过滤索引
  • 仅限于包含在表中的列。

  • 只允许简单的过滤器表达式。

  • 实现简单,但当查询基表时,优化器将决定是否适合使用。

两者都不能使用非确定性表达式。

此外,非索引视图和表值函数可以构建在索引视图之上(考虑使用 WITH(NOEXPAND) 提示)。+1 - Branko Dimitrijevic

1

首页视图:

i) 我需要从多个表中获取结果。

ii) 我在此视图上创建了索引以提高性能。

筛选索引:

i) 单个表中有很多记录。

ii) 特定值的特定where条件包含许多记录,并且此条件将频繁使用。或者此条件将用于非常重要的查询,其中性能至关重要。在这种情况下,我们可以在表上创建筛选索引。

请查看我的答案示例

MS SQL Server 2008 - 更新大型数据库


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接