Sql server 使用SQL Server索引视图代替表

Sql server 使用SQL Server索引视图代替表,sql-server,indexed-view,Sql Server,Indexed View,对于在SQL Server 2016中使用索引视图,我有点困惑 这是我的问题。如果我有一个包含很多列的事实表,并且我创建了一个名为IV_Salesas的索引视图 select year, customer, sum(sales) from F_Sales group by year, customer 我将汇总本年度和客户的所有销售额 之后,当用户从F_sales运行查询时,如 Select year, customer, sum(sale

对于在SQL Server 2016中使用索引视图,我有点困惑

这是我的问题。如果我有一个包含很多列的事实表,并且我创建了一个名为
IV_Sales
as的索引视图

select 
    year, 
    customer, 
    sum(sales) 
from F_Sales 
group by year, customer
我将汇总本年度和客户的所有销售额

之后,当用户从F_sales运行查询时,如

Select 
    year, customer, 
    sum(sales) 
from F_sales 
group by year, customer 
优化器(在SQL Server企业版中)是否会自动使用索引视图
IV_sales
而不是
F_sales
的表扫描? 我有标准版,当我添加

Select 
    year, 
    customer, 
    sum(sales) 
from F_sales WITH (NOEXPAND) 
group by year, customer
我得到一个错误,因为没有像我在索引视图上创建的那样的聚集索引。在标准版中,有没有办法强制使用索引视图而不是表

我的现实问题是,我有一个Cognos框架模型,它指向表
F_sales
,当出于性能原因使用年、客户和销售总额执行报告时,我希望它自动使用索引视图,而不是表


我希望我已经清楚我的问题了。非常感谢。如果您有性能问题,索引视图可能是您最不想尝试的

您应该用尽所有其他方法,比如首先使用标准索引

例如,如果您确实知道正在执行表扫描,那么简单的解决方案是添加一个非聚集索引以满足查询,这样它就可以执行索引扫描或查找。如果它仍然不使用此选项,则需要继续进行性能调优,并找出原因(非可搜索表达式?过时的统计数据?)

您的索引视图将在非常有限的情况下自动使用(无需明确提及索引视图)。您将在查询计划中看到它

如果查询与索引视图定义非常匹配,它将使用索引视图

对SQL做一个很小的更改(比如连接到另一个表),它不会抛出错误,只会退回到不使用索引视图

像Cognos这样的自动SQL编写工具将很快使查询计划器无法识别SQL,因此不会使用索引视图

如果您只需打开SSM并进行一些实验,这一切都很容易验证


简言之:从标准索引、筛选索引,甚至列存储索引(我听说这对事实表特别有用)开始您的操作。

如果您有性能问题,索引视图可能是您最不想尝试的

您应该用尽所有其他方法,比如首先使用标准索引

例如,如果您确实知道正在执行表扫描,那么简单的解决方案是添加一个非聚集索引以满足查询,这样它就可以执行索引扫描或查找。如果它仍然不使用此选项,则需要继续进行性能调优,并找出原因(非可搜索表达式?过时的统计数据?)

您的索引视图将在非常有限的情况下自动使用(无需明确提及索引视图)。您将在查询计划中看到它

如果查询与索引视图定义非常匹配,它将使用索引视图

对SQL做一个很小的更改(比如连接到另一个表),它不会抛出错误,只会退回到不使用索引视图

像Cognos这样的自动SQL编写工具将很快使查询计划器无法识别SQL,因此不会使用索引视图

如果您只需打开SSM并进行一些实验,这一切都很容易验证

简而言之:从标准索引、筛选索引、甚至列存储索引(我听说这对事实数据表特别有用)开始选择。

如果SQL Server在查询中没有提到索引视图,那么如果SQL Server会使用索引视图,我会非常惊讶。没有办法强制SQL Server使用索引视图,事实上,虽然企业版在理论上可以使用索引视图,即使它在查询中未被提及,但实际上它在这方面是不好的——事实上,即使在查询视图时,您必须经常指定“代码>扩展< <代码> >,以强制它考虑视图上的索引。如果您仍然想使用它,从SP1开始,Standard Edition中就提供了此功能(索引视图匹配),但我从来没有这么幸运过。如果查询中没有提到视图,SQL Server会使用索引视图,我会非常惊讶。没有办法强制SQL Server使用索引视图,事实上,虽然企业版在理论上可以使用索引视图,即使它在查询中未被提及,但实际上它在这方面是不好的——事实上,即使在查询视图时,您必须经常指定“代码>扩展< <代码> >,以强制它考虑视图上的索引。如果您仍然想使用它,这个功能(索引视图匹配)从SP1开始在标准版中就可以使用,但我从来没有这么幸运过。