SQL Server 索引视图匹配与连接不起作用的视图

Posted

技术标签:

【中文标题】SQL Server 索引视图匹配与连接不起作用的视图【英文标题】:SQL Server indexed view matching of views with joins not working 【发布时间】:2011-02-22 15:58:36 【问题描述】:

是否有人体验过 SQL Server 2008 R2 何时能够自动匹配包含查询连接的索引视图(也称为物化视图)?

例如视图

select dbo.Orders.Date, dbo.OrderDetails.ProductID
from dbo.OrderDetails
join dbo.Orders on dbo.OrderDetails.OrderID = dbo.Orders.ID

无法自动匹配到相同的精确查询。当我直接从这个视图中选择with (noexpand) 时,我实际上得到了一个更快的查询计划,它对索引视图的聚集索引进行扫描。我可以让 SQL Server 自动进行这种匹配吗?我有很多查询和视图,我不想每次都手动引用索引视图,因为我使用的是 OR 映射器。

我使用的是 SQL Server 2008 R2 企业版。

编辑:我找到了解决方案。 SQL Server 2008 R2 不会自动匹配超过 2 个连接的索引视图。可能会大大减慢优化过程。

编辑 2:在我创建问题 2 年后回顾这个问题,我认为我的结论不正确。物化视图匹配是一个非常脆弱的过程,多年来我找不到明确的规则。

当然,以下因素起作用:

连接数 存在谓词 在视图和查询中加入订单

【问题讨论】:

【参考方案1】:

我对您的问题到底是什么有点模糊;但我认为这会给你你想要的:

http://msdn.microsoft.com/en-us/library/ms181151.aspx

有很多奇怪的、看似随意的条件限制了 SQL Server 何时在查询中使用视图索引。此页面为 SQL Server 2008 记录了它们。

【讨论】:

以上是关于SQL Server 索引视图匹配与连接不起作用的视图的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho 数据集成:与 MS SQL Server 的 jdbc 连接不起作用

SQL Server索引视图以(物化视图)及索引视图与查询重写

SQL Server 性能和索引视图

索引视图以提高 SQL Server 上多个连接的性能

在 SQL Server 中的架构绑定视图上创建索引

SQL Server 索引视图与 Oracle 物化视图