我对MSSQL查询有一个非常奇怪的问题,在存储过程中使用但在这里简化以显示问题的核心。
查询正在跟随
SELECT vs.fv_numer FROM win.v_sprzedaz vs
视图非常复杂,但运行大约需要2秒。 现在很惊讶:
DECLARE @test=1
SELECT vs.fv_numer FROM win.v_sprzedaz vs
WHERE @test =1
现在查询执行需要...... 15秒!
由于缺乏知识,我没有详细分析执行计划(在两种情况下都是不同的而且非常复杂)。任何想法为什么???
答案 0 :(得分:0)
猜测where子句导致视图中使用的索引不被查阅。您需要在视图查询中添加一些QUERY HINT来强制执行它们。
在不知道你的数据库的情况下,很难指出它。但对我来说,它有点像查询计划也无法优化。
我解决此类问题的首选方法是逐步进行视图查询并将@test添加到其中并查看更改,然后通过逐步删除条件进行调查,直到@test没有区别为止。然后你看到了冲突。然后,您需要调查如何最好地添加优化,因为这可能会影响视图的其他用例。