【问题标题】:Strange behaviour of SELECT statement with constant in WHERE在 WHERE 中具有常量的 SELECT 语句的奇怪行为
【发布时间】:2012-12-03 04:47:48
【问题描述】:

我有一个非常奇怪的 MSSQL 查询问题,在存储过程中使用,但在这里简化以显示问题的核心。

查询如下

SELECT vs.fv_numer FROM win.v_sprzedaz vs

View 相当复杂,但运行大约需要 2 秒。 现在大吃一惊:

DECLARE @test=1
SELECT vs.fv_numer FROM win.v_sprzedaz vs
WHERE @test =1

现在查询执行需要...15 秒!

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

【问题讨论】:

  • 是您的确切查询还是您实际上将@test =1 谓词与另一个带有ANDOR 的谓词组合在一起?另外如果你添加OPTION (RECOMPILE)呢?

标签: sql-server optimization select where


【解决方案1】:

猜测 where 子句导致视图中使用的索引不被查询。您需要将一些 QUERY HINTs 放入视图查询中以强制执行它们。

在不了解您的数据库的情况下,很难对其有所了解。但在我看来,查询计划也无法优化。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2014-07-29
    • 2017-03-29
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多