原SQL语句情景:
语句中有表关联,有uion,还有substr都会影响查询效率。但是真正然速度慢的原因是and rownum = 1语句。
执行时间需要6秒-9秒,对于查询速度实在是不能忍。
select t.a, t.b, t.c, t.d
from (select t1.a, t1.b, t1.c, t1.d
from table1 t1
where (t1.e = upper(#{e_vlaue}) or t1.e = lower(#{e_vlaue}))
union
select t1.a, t1.b, t1.c, t1.d
from table2 t1,
table3 t2
where substr(t2.f, 0, 15) = t1.g
and (t2.e = upper(#{e_vlaue}) or t2.e = lower(#{e_vlaue}))
and rownum = 1
) t
order by t.c desc
去掉 and rownum = 1后执行速度在1秒左右,明显效率提升。
看到有的说加上order by排序,改变其执行计划可以提升效率,自己没试过。