我们的一个观点,通常很快,从昨天中午开始需要很长时间。没有任何改变,但它现在需要几分钟才能运行。
SELECT
T1.ITEMNO,
ROUND(SUM(T3.TOTAL * V1.USDCOST), 3) USDTOTALCOST,
ROUND(SUM(T3.TOTAL * V1.GBPCOST), 3) GBPTOTALCOST,
SUM(T3.TOTAL) AS TOTALCOMPONENTS
FROM
TABLE1 T1 WITH (NOLOCK)
INNER JOIN TABLE2 T2 WITH (NOLOCK) ON T1.RECORD_ID = T2.RECORD_ID
INNER JOIN TABLE3 T3 WITH (NOLOCK) ON T1.RECORD_ID = T3.RECORD_ID AND T2.LINENO = T3.LINENO
INNER JOIN VIEW1 V1 ON T2.COMPONENTNO = V1.ITEMNO
WHERE
T2.COMPONENTNO <> '' AND T1.WINDOW_ID = 'COMPONENTS'
GROUP BY T1.ITEMNO
现在,如果我删除计算出的USDTOTALCOST
和GBPTOTALCOST
列,则查询会非常快速地运行。另外,如果我删除条件T1.WINDOW_ID = 'COMPONENTS'
,那么这也大大提高了查询的速度。
VIEW1
也可以自己快速运行,它似乎会导致此视图在加入时减慢并且T1.WINDOW_ID = 'COMPONENTS'
条件不会强制执行。
我被困 - 我不知道在哪里检查以尝试在合理的时间内运行此查询。我通常会检查SSMS建议我在执行计划的顶部创建哪些索引,但是在检查此查询的执行计划时没有这样的建议。
什么可能导致查询减慢这么多?我该怎么办才能让它再次运作?
提前致谢。