我提出了一个视图,它为产品表做了一些查询逻辑。当我从该视图中选择
时Select * from dbo.productView where productID = UUID
执行计划非常低效。但是,如果我采用生成视图的查询并向其添加where子句,则执行计划非常有效。为什么这些会产生这种径向不同的执行计划。我认为在普通视图(未编入索引)的情况下,查询分析器会扩展视图,因此实际上就像将where子句添加到构成视图的SELECT中一样。
我不能只对indexView进行索引,因为它使用CTE和窗口函数,但我希望能够让查询分析器生成更高性能的执行计划,就像从普通选择那样。
答案 0 :(得分:1)
我认为在查询分析器的普通视图(未编入索引)的情况下 会扩大视图
这是事实。但是,这两个查询变体具有不同的执行计划缓存槽。也许你不幸地重用了一个嗅到错误参数值的旧计划。
获得新的计划。清除测试系统上的缓存或添加RECOMPILE
提示。现在的计划是相同的。
要解决此问题,请使用解决错误计划和参数嗅探的常用技巧。