PL/SQL查询优化的五大原则及举例

但基本上就这几条,后面举例来说明

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

发布了153 篇原创文章 · 获赞 15 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/beyond911/article/details/103343359
今日推荐