【发布时间】:2014-10-19 02:25:16
【问题描述】:
我创建了一个对产品表执行一些查询逻辑的视图。当我从那个视图中选择像
Select * from dbo.productView where productID = UUID
执行计划效率极低。但是,如果我使用生成视图的查询并将 where 子句添加到其中,则执行计划非常有效。为什么这些会产生如此径向不同的执行计划。我认为在普通视图(未索引)的情况下,查询分析器会扩展视图,因此实际上它就像将 where 子句添加到组成视图的 SELECT 中一样。
我不能只索引 productView,因为它使用 CTE 和窗口函数,但我希望查询分析器能够生成性能更高的执行计划,例如从普通选择中。
【问题讨论】:
-
尝试将
option (recompile)添加到每个sql语句的末尾,然后再次比较计划。 -
需要更多细节,但可能是stackoverflow.com/q/13635531/73226的欺骗
-
永远不要以“只为 productView 编制索引”的方式来考虑它——索引并不是您添加到任何视图以使其更快的神奇事物。 Egads 我需要写博客。
标签: sql sql-server query-optimization sql-execution-plan