我有一个SQL查询,我想优化它作为SP的内部查询使用。优化SQL查询
SELECT TOP 1 @CurrentStartDate = Strt_Dt FROM (
SELECT 1 AS seq, Stat, Strt_Dt, Est_Hrs_Comp, EndDate, Tckt_Id, Envr
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID AND stat = 'INPR'
UNION
SELECT TOP 1 2 AS seq, Stat, Strt_Dt, Est_Hrs_Comp, EndDate, Tckt_Id, Envr
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID AND stat = 'CMPL'
ORDER BY enddate DESC
UNION
SELECT TOP 1 3 AS seq, Stat, Strt_Dt, Est_Hrs_Comp, EndDate, Tckt_Id, Envr
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID AND stat = 'PLND'
ORDER BY strt_dt
UNION
SELECT 4 AS seq, 'UNP', NULL, NULL, NULL, tckt_id, 'Unplanned'
FROM pipeline_rest_envr_info e
WHERE e.tckt_id = @TicketID
) aa
ORDER BY aa.seq
有没有更好的方法来使用这个查询。我需要这个,因为我有很多相同类型的逻辑。
应在第一个子查询中有一个ORDER'条款BY'?最后一个子查询是否应该有一个额外的'WHERE'子句,否则它似乎也包含前面查询中包含的所有记录?你能否展示一些数据来清楚表明什么是和未被使用这些“TOP 1”排除? – MatBailie
*** SQL ***只是*结构化查询语言* - 许多数据库系统使用的语言,但不是数据库产品...优化是针对特定供应商的 - 因此我们真的需要知道**数据库系统**(以及您正在使用的版本).... –
将简单英语添加到您想要实现的功能中也很有用 - 如果您解释它,则更容易帮助解决问题。查询应该做什么,它不做什么?性能问题有哪些? (我认为UNION是主要问题) – Charleh