1

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

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

4

1 回答 1

0

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

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

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

于 2012-12-15T10:29:31.223 回答