连的orcale 想请教一下各位..这个SQL语句还有能优化的地方嘛..库里五六十万条记录+一张1100W条的表,加上前端传过来的条件也要20s+..查询结果返回的时候前端也已经异步返回了.查询结果不显示..
不知道有没有什么办法能让sql执行快一点,或者还是只能把前端ajax改成同步?
SELECT
CE.EQUIP_NUMBER AS devid,
CE.ENCURBANDISTRICT,
CE.ENCREGION,
CE.ENCBANK,
CE.ENCDOT,
se.TOTALDEPOSITAMOUNT,
se.TOTALWITHDRAWALAMOUNT,
se.TOTALDEPOSITLONGSHORT,
se.TOTALWITHDRAWALLONGSHORT,
to_char(to_date(se.EXDATE,'yyyy-mm-dd'),'yyyy-mm-dd')||' '||substr(se.EXTIME,0,2)||':'||substr(se.EXTIME,3,2)||':'||substr(se.EXTIME,5,2) AS nrdate,
se.RZ100,
se.RZ50,
se.RZ20,
se.RZ10,
se.RZ5,
se.RZ1,
se.RY10,
se.RY5,
se.RY1,
se.RCJ10,
se.RCJ5,
se.RCJ1,
se.CZ100,
se.CZ50,
se.CZ20,
se.CZ10,
se.CZ5,
se.CZ1,
se.CY10,
se.CY5,
se.CY1,
se.CCJ10,
se.CCJ5,
se.CCJ1 FROM
CFG_EQUIPINFO CE inner join
(SELECT
s.*,ROWNUM RN from
(SELECT x1.*,
row_number() over(partition by devid,to_char(to_date(x1.EXDATE,'yyyy-mm-dd'),'yyyy-mm-dd')||' '||substr(x1.EXTIME,0,2)||':'||substr(x1.EXTIME,3,2)||':'||substr(x1.EXTIME,5,2) order by to_char(to_date(x1.EXDATE,'yyyy-mm-dd'),'yyyy-mm-dd')||' '||substr(x1.EXTIME,0,2)||':'||substr(x1.EXTIME,3,2)||':'||substr(x1.EXTIME,5,2)) su
FROM
SN_ENCEXCHANGEINFO x1 where 1=1
) s
) se ON se.DEVID = CE.equip_number
where 1 = 1
and su=1
第一步排除耗时久的原因
1.首页 你把里面的子查询语句测试看耗时久不久,
2.去除不必要的字段
3.字段内容多的字段肯定查询久,建议分成子表。不用的时候不查
4. TO_DATA TO_CHAR这种字符串操作能在实体bean里面操作就在实体bean里面操作
5.加索引 这个最普遍,(个人认为才四五十万应该不是这个原因)
https://blog.csdn.net/weixin_34336292/article/details/86346464
索引加了吗?
把sql拆分吧
用explain 来检查一下索引是否生效,如果所有索引都生效了的话。可以尝试把sql拆分开单独查询,然后在后端组装数据试试