select (select dmmc from dwdmb where dmdma.dwdm)) as dmmc,rq,name from lista
where rq = (select max(rq) from lista where name='wz') and name='wz'我算了一下,大概执行一遍需要15~32毫秒之间,关键是我要执行100~400遍,不停的更换name变量有没有好的方法优化下查询速度
where rq = (select max(rq) from lista where name='wz') and name='wz'我算了一下,大概执行一遍需要15~32毫秒之间,关键是我要执行100~400遍,不停的更换name变量有没有好的方法优化下查询速度
select b.dmmc, a.rq, a.name from
( select rq, name, dwdm from list where dwdm='wz' order by rq desc
) a, dwdm b where a.dwdm=b.dmdm(+) and rownum=1; --建议用表关联,否则执行顺序会乱
(select dmmc from dwdmb where dmdma.dwdm) 这个是什么,是否可以忽略不计?where条件重复了,既然是name为wz的max(rq),后面的那个name='wz' 是多余的.索引: list(name, rq)即可.如果表数据量很大几百上千万,可以取rowid,分步骤实现,也不怎么慢的.
select * from (select dmmc,rq,name from lista where name='wz' order by name,rq) where rownum=1;
1.同意:用绑定变量,并且NAME上加索引
2.SQL可以通过如下优化:
Select *
From (Select Dmmc
,Rq
,Name
,Row_Number() Over(Partition By Name Order By Rq Desc) Rn
From Lista
Where Name = :Xxx)
Where Rn = 1;
关键是我要执行100~400遍?是一个应用需要执行这个sql这么多次么,可以使用绑定变量的方式,硬parse的时间就少了如果是应用上这样,最好还是修改一下应用,通过临时表或者其他的方式,只最好执行一次。需要综合考虑,select dmmc from dwdmb where dmdma.dwdm)这个子查询没有看明白。最后的条件是一个function么。
我上小学的百米成绩,老师就是通过这个方法得到的,根本不用什么软件来实现。 o(∩_∩)o... 其实生活中有很多方法你都没有注意。