但基本上就这几条,后面举例来说明
1、减少子查询或高级函数的使用
2、适当使用索引
3、多表关联时注意关联条件
4、要规划好表的写法的取数方式,看清要使用到的表;
5,应尽量避免使用not是一个非常非常消耗资源的项,如果能不用尽量不用(关键查询条件上用not like是大忌)
6,子查询不要写在条件里,要写在select里;
例子1(关键查询条件上尽量不要使用用not like)
select *
from IFSAPP.SHOP_ORD
where DATE_ENTERED>=DATE'2019-11-1'
AND DATE_ENTERED<= DATE '2019-11-30'
AND CONTRACT='PPCD'
AND PART_NO NOT IN (SELECT PART_NO FROM IFSAPP.SHOP_ORD WHERE PART_NO LIKE'45%'OR PART_NO LIKE '50%')
以下用了3分钟52秒
select *
from IFSAPP.SHOP_ORD
where DATE_ENTERED>=DATE'2019-11-1'
AND DATE_ENTERED<= DATE '2019-11-30'
AND CONTRACT='PPCD'
AND SUBSTR(PART_NO,1,2) NOT IN ( '50','45')
以下用了57seconds
select *
from IFSAPP.SHOP_ORD so1
where DATE_ENTERED >= DATE '2019-11-1'
AND DATE_ENTERED <= DATE '2019-11-30'
AND CONTRACT = 'PPCD'
AND not exists
(SELECT 1
FROM IFSAPP.SHOP_ORD so2
WHERE so1.contract = so2.contract
and so1.order_no = so2.order_no
and so1.part_no = so2.part_no
and (PART_NO LIKE '45%' OR PART_NO LIKE '50%'))
为什么效率这么高?让我思考下。
以下用了55seconds
select *
from IFSAPP.SHOP_ORD
where DATE_ENTERED >= DATE '2019-11-1'
AND DATE_ENTERED <= DATE '2019-11-30'
AND CONTRACT = 'PPCD'
and instr(PART_NO, '45') != 1
and instr(PART_NO, '50') != 1
56秒多
SQL优化文章:https://blog.csdn.net/jianzhang11/article/details/102867120
ORACLE运维
https://bbs.csdn.net/topics/395382796