今天在优化一个先人留下的sql语句时,发现有两个问题。在这些问题被解决后,SQL语句执行效率有了很大的提高。
首先介绍一下情况。
数据库是oracle。
我们使用的数据表有40+的字段。大概有4-5W条数据。
我们需要获取一个主管所负责的所有数据。
元sql是这样的:
select * from Opened_Ar where
customerid in
(select distinct customerid from Opened_Ar where
( sec not like 'SA%' and sec not like 'KR%')
and amt > 0 and sh_Of_Sales=&sh and ich != &sh
)
and bill_Date < to_date('2010-3-1','yyyy-MM-dd')
and (sec not like 'SA%' and sec not like 'KR%') and amt > 0
order by customerName1 desc,bill_Date desc
在尝试抓取一个只有49条记录的结果集时,竟然用时630s。崩溃了。
发现有两个问题:
- 使用了in关键字。虽然in对应的()内也只有几条数据,但是同样会影响速度。应该使用exists
- bill_date无法过滤掉大量的数据,应该放在最接近where的地方。可以过滤大量数据的条件放在距离where最远的地方。(因为sql语句是从下往上运行的)
最终的sql语句改为这样:
select * from Opened_Ar o1 where
bill_Date < to_date('2010-3-1','yyyy-MM-dd')
and (sec not like 'SA%' and sec not like 'KR%') and amt > 0
and exists
(select customerid from Opened_Ar o2 where ( o2.sec not like 'SA%' and o2.sec not like 'KR%') and o2.amt > 0 and o2.sh_Of_Sales=&sh and o2.ich != &sh and o2.customerid = o1.customerid
)
order by customerName1 desc,bill_Date desc
修改后,原来630s的时间,竟然缩减为不到一秒钟。非常好。以上是我的小修改。或许还有更好的方法。但这样已经可以达到我目前的需求了。
分享到:
相关推荐
sql语句优化之降龙十八掌 sql语句教程 sql语句优化
sql语句优化原则
2023最新mysql的sql语句优化方法技巧面试题总结.docx2023最新mysql的sql语句优化方法技巧面试题总结.docx2023最新mysql的sql语句优化方法技巧面试题总结.docx2023最新mysql的sql语句优化方法技巧面试题总结.docx2023...
SQL语句优化方法30例! 很值得下载看看!资源免费,大家分享!!
avh_-新一代智能SQL语句优化技术的ppt演示课件
sql语句优化建议,sql语句优化建议,sql语句优化建议
Sql语句优化,可以提升软件系统的效率,是很值得研究的技术
sql 语句优化 SQL Server数据库查询速度慢的原因有很多
优化数据库、SQL语句优化的原则、不要以为只有SELECT语句是查询。实际上,带有任何WHERE条件的 DML(INSERT、UPDATE、DELETE)语句中都包含查询要求,在后面的文章中,当说到查询时,不一定只是指SELECT语句,也有可能...
提供了很好的sql优化案例,对于提升sql编程能力有很大的帮助
基于索引的SQL语句优化之降龙十八掌 SQL语句优化
oracle性能优化中SQL语句优化,简单的优化思想、常见的优化命令
SQL语句最优化SQL语句最优化SQL语句最优化SQL语句最优化
Oracle——sql语句优化
sql语句优化技术分析 sql语句优化技术分析
SQL语句优化 速度第一 非常好的优化功能,希望分享
sql语句优化是软件开发最常用的方式,以提高性能的最佳办法!
客服业务受到SQL语句的影响非常大...本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用其中一掌来驯服客服业务中横行的‘恶龙’
便于Java入门人员交流学习。可以深刻理解该语言的常用API。帮助初学者尽快入门。