Select和View之间的执行计划差异

时间:2014-08-25 21:02:52

标签: sql sql-server query-optimization sql-execution-plan

我提出了一个视图,它为产品表做了一些查询逻辑。当我从该视图中选择

Select * from dbo.productView where productID = UUID

执行计划非常低效。但是,如果我采用生成视图的查询并向其添加where子句,则执行计划非常有效。为什么这些会产生这种径向不同的执行计划。我认为在普通视图(未编入索引)的情况下,查询分析器会扩展视图,因此实际上就像将where子句添加到构成视图的SELECT中一样。

我不能只对indexView进行索引,因为它使用CTE和窗口函数,但我希望能够让查询分析器生成更高性能的执行计划,就像从普通选择那样。

1 个答案:

答案 0 :(得分:1)

  

我认为在查询分析器的普通视图(未编入索引)的情况下   会扩大视图

这是事实。但是,这两个查询变体具有不同的执行计划缓存槽。也许你不幸地重用了一个嗅到错误参数值的旧计划。

获得新的计划。清除测试系统上的缓存或添加RECOMPILE提示。现在的计划是相同的。

要解决此问题,请使用解决错误计划和参数嗅探的常用技巧。

相关问题