有没有人体验过 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 年后回顾这个问题,我认为我的结论不正确。物化视图匹配是一个非常脆弱的过程,多年来我找不到明确的规则。
当然,以下因素起作用:
- 连接数
- 谓词的存在
- 视图和查询中的联接顺序