如何优化下面SQL语句

SQL查询优化实践
我有一个sql语句,查询时间比较长

SELECT * FROM
(SELECT TEMP.*,ROWNUM RN FROM(SELECT ENP.ENP_NAME ,DETAIL.B_ENP_NAME ,GOOD.DRUG_NAME ,GOOD.PASS_NUM ,GOOD.MANU_NAME ,SALE.LOT_NUM ,NVL(DETAIL.SALE_AMOUNT,'0') || NVL(DETAIL.UOM,'') ,TO_CHAR(SALE.CREATE_DATE,'YYYY-MM-DD')
FROM SALEDETAIL DETAIL
LEFT JOIN SALE SALE ON SALE.ID=DETAIL.MAIN_ID
LEFT JOIN GOODS_INFO GOOD ON GOOD.ID=SALE.DRUG_ID
LEFT JOIN ENTERPRISE ENP ON ENP.ID=SALE.S_ENP_ID
WHERE SALE.IS_SUBMIT=1 AND ENP.REGION_ID LIKE '31%'
ORDER BY TO_CHAR(SALE.CREATE_DATE,'YYYY-MM-DD') DESC )
TEMP WHERE ROWNUM <=10) WHERE RN > 0


其中SALEDETAIL 大概有26万条记录
SALE 有20万条记录
GOODS_INFO 有1-2万条记录
ENTERPRISE大概有1-2条记录

目前这个查询需要耗时十几秒,太慢了,有什么好优化的地方吗(去掉order by到时很快,但客户是要求安时间排序)。SALEDETAIL 和SALE每天都在万数量级增加,数据库采用的ORACLE.

这个分页语句查询在去掉order by之后还是速度很快的。

但在做统计总记录数是慢了。
SELECT COUNT(*) FROM (SELECT DETAIL.ID FROM IDS_SALEDETAIL DETAIL LEFT JOIN SALE SALE ON SALE.ID=DETAIL.MAIN_ID LEFT JOIN GOODS_INFO GOOD ON GOOD.ID=SALE.DRUG_ID LEFT JOIN ENTERPRISE ENP ON ENP.ID=SALE.S_ENP_ID ) TOTALTABLE
统计的速度和获取分页的速度不是一个数量等级的差别。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值