【发布时间】:2013-11-06 20:40:45
【问题描述】:
我注释掉了有问题的代码。当我注释掉这部分时,运行大约需要 5 秒。
加上额外的条件,大约需要一年(好吧,大概是 10 分钟)。
感谢你们的帮助!
SELECT t.account as fstrAccount,
t.idno as flngID,
CASE
WHEN t.fstrType = '' THEN ''
WHEN wd.fstrWorkType = 'SUSIN1'
AND wd.fstrOwner = ' '
AND wd.flngworkkey = wr.flngworkkey
AND wr.fstrAccountType <> '007'
AND wr.fblnOpen = 1
--AND EXISTS
-- (SELECT 1
-- FROM tblIndicator id
-- WHERE id.fstrIndicator = 'EIWTCH'
-- AND id.flngVer = 0
-- AND id.flngAccountKey = wd.flngAccountKey)
THEN 'Suspended for Audit Indicator - EIC Watch For'
ELSE t.fstrTaskSource + '_TYP_' + t.fstrType
END AS fstrType,
【问题讨论】:
-
您可能需要索引
tblIndicator.fstrIndicator或tblIndicator.flngAccountKey -
为什么不在 tblIndicator 上添加一个额外的连接(左连接)到 from 子句,这样您就不必执行子查询并且存在。否则查询必须每次触发而不是一次。添加到左侧加入,添加 where 子句条件,然后简单地检查 id.flngaccountkey 上的空值,但要真正知道我们需要查看执行计划和结果。
-
我应该如何索引它们?任何例子,我之前从未明确地打算这样做(初学者)
标签: sql performance select exists case-when