【发布时间】:2016-09-16 12:33:25
【问题描述】:
我有以下联合子句导致整个存储过程运行非常缓慢。我正在使用 union 从同一个表中收集信息,但是第二个和第三个 union 子句也连接到其他表以进行过滤。我知道这可能不是最好的编码方法,希望有人可以指导我更好的语法。
select ss.int_tran_id
from status ss
where ss.stage in ('ACHPayment_Confirmed', 'HIFV4', 'HIFV5_FTRINF', 'Payment_HIFV5_FTRINF')
UNION
select ss.int_tran_id
from status ss, references rf
where ss.int_tran_id = rf.int_tran_id
and ss.stage = 'PREVDAY'
and rf.mid_ref IS NOT NULL
UNION
select ss.int_tran_id
from status ss, app_data ad, ach aa
where ss.int_tran_id = ad.int_tran_id
and ad.app_data_id = aa.ach_id
and ss.stage = 'PREVDAY'
and aa.par_number IS NOT NULL
【问题讨论】:
-
请发布您的表结构,包括索引和查询的解释计划,以帮助人们了解正在发生的事情以及如何改进您的查询
-
记录是否不同?如果是,请使用 UNION ALL。除非发布执行计划,否则没有更多提示 :)
-
有点长,我可以把它作为文件附件发在这里吗?不,这些记录并不明显
-
跳过 UNION 的。将 EXISTS 添加到第一个选择中。