Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 连接不起作用的视图的SQL Server索引视图匹配_Sql Server_Sql Server 2008_Query Optimization_Materialized Views_Indexed View - Fatal编程技术网

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

Sql server 连接不起作用的视图的SQL Server索引视图匹配,sql-server,sql-server-2008,query-optimization,materialized-views,indexed-view,Sql Server,Sql Server 2008,Query Optimization,Materialized Views,Indexed View,是否有人有过SQL Server 2008 R2何时能够自动匹配包含查询联接的索引视图(也称为物化视图)的经验 例如视图 select dbo.Orders.Date, dbo.OrderDetails.ProductID from dbo.OrderDetails join dbo.Orders on dbo.OrderDetails.OrderID = dbo.Orders.ID 无法自动匹配到相同的精确查询。当我使用(noexpand)直接从这个视图中选择时,我实际上得到了一个更快的查询

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

例如视图

select dbo.Orders.Date, dbo.OrderDetails.ProductID
from dbo.OrderDetails
join dbo.Orders on dbo.OrderDetails.OrderID = dbo.Orders.ID
无法自动匹配到相同的精确查询。当我使用(noexpand)直接从这个视图中选择
时,我实际上得到了一个更快的查询计划,可以扫描索引视图的聚集索引。我可以让SQL Server自动执行此匹配吗?我有很多查询和视图,我不想每次都手动引用索引视图,因为我使用的是OR映射器

我正在使用SQLServer2008R2的企业版

编辑:我找到了解决方案。SQL Server 2008 R2不自动匹配具有2个以上联接的索引视图。这可能会大大降低优化过程的速度

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

当然,以下因素也发挥了作用:

  • 连接数
  • 谓词的存在
  • 视图和查询中的联接顺序

    • 我对你的问题有点模糊;但我认为这会给你你想要的:

      SQL Server在查询中使用视图索引的时间受到许多奇怪的、看似任意的条件的限制。此页面记录了SQL Server 2008的这些功能