Sql server WHERE中带有常量的SELECT语句的奇怪行为

Sql server WHERE中带有常量的SELECT语句的奇怪行为,sql-server,optimization,select,where,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秒 由于缺乏知识,我没有详细分析执行计划(在这两种情况下,它是不同的,相当复杂

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


由于缺乏知识,我没有详细分析执行计划(在这两种情况下,它是不同的,相当复杂)。你知道为什么吗?

猜猜看,where子句导致视图中使用的索引未被查询。您需要在视图查询中放入一些s来强制执行它们

如果不知道你的数据库,就很难找到它。但在我看来,查询计划似乎也无法优化


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

这是您的确切查询,还是您实际将
@test=1
谓词与另一个带有
的谓词组合在一起了?另外,如果添加
选项(重新编译)
,会怎么样?