在WHERE中使用常量的SELECT语句的奇怪行为

时间:2012-12-15 10:13:00

标签: sql-server optimization select where

我对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秒!

由于缺乏知识,我没有详细分析执行计划(在两种情况下都是不同的而且非常复杂)。任何想法为什么???

1 个答案:

答案 0 :(得分:0)

猜测where子句导致视图中使用的索引不被查阅。您需要在视图查询中添加一些QUERY HINT来强制执行它们。

在不知道你的数据库的情况下,很难指出它。但对我来说,它有点像查询计划也无法优化。

我解决此类问题的首选方法是逐步进行视图查询并将@test添加到其中并查看更改,然后通过逐步删除条件进行调查,直到@test没有区别为止。然后你看到了冲突。然后,您需要调查如何最好地添加优化,因为这可能会影响视图的其他用例。