Sql server SQL Server:筛选索引与索引视图

Sql server SQL Server:筛选索引与索引视图,sql-server,indexing,Sql Server,Indexing,每种方法的相对优点是什么?两者似乎都限制了查询所需的行数和列数,那么,是什么决定了选择一个而不是另一个的基础呢?索引视图 可以包含基于表达式的列 可以包含多个表的联接 可以在用户SQL语句中直接引用 允许所有确定性表达式 具有复杂的先决条件,但使用[indexedview]中的select*简单且一致 A 仅限于表中包含的列 仅允许筛选器的简单表达式 很容易实现,但是优化器将在查询基表时确定使用是否合适 它们都不能使用非确定性表达式。索引视图: 我必须从多个表中得到结果 ii我基于此视图创建索引

每种方法的相对优点是什么?两者似乎都限制了查询所需的行数和列数,那么,是什么决定了选择一个而不是另一个的基础呢?

索引视图

可以包含基于表达式的列

可以包含多个表的联接

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

允许所有确定性表达式

具有复杂的先决条件,但使用[indexedview]中的select*简单且一致

A

仅限于表中包含的列

仅允许筛选器的简单表达式

很容易实现,但是优化器将在查询基表时确定使用是否合适

它们都不能使用非确定性表达式。

索引视图:

我必须从多个表中得到结果

ii我基于此视图创建索引以提高性能

过滤索引:

我知道在一张桌子上有很多记录

ii具有特定值的条件包含大量记录的特定情况。这个条件将经常使用,或者这个条件将用于非常重要的查询中,其中性能是最重要的。 在这种情况下,我们可以在表上创建过滤索引

例如,检查我的答案

过滤索引需要一个非常简单的条件才能实现,而索引视图有一个相当广泛的、很长的必须满足的先决条件列表。索引视图也不是为了减少行数,而是为了加速针对该视图的大多数SELECT查询,从而持久化和索引视图显示的数据