使用unnest Hint优化SQL
来源:互联网 发布:战舰少女r重炮改数据 编辑:程序博客网 时间:2024/04/20 00:07
下面这个SQL执行时间需要28.4分钟:
SELECT *
FROM (SELECT ROWNUM LINE, M.*
FROM (SELECT TO_CHAR(A.OID) OID,
A.REGION,
TO_CHAR(A.GROUPOID) GROUPOID,
A.MEMTYPE,
(SELECT DICTNAME
FROM DICT_ITEM
WHERE GROUPID = 'GroupMemberType'
AND DICTID = A.MEMTYPE
) MEMTYPENAME,
A.APPLYOPERID,
SUBS.SUBSNAME SUBSNAME
FROM SUBSCRIBER SUBS, GROUP_SUBS_MEMBER A
WHERE SUBS.REGION(+) = 14
AND SUBS.ACTIVE(+) = 1
AND SUBS.SUBSID(+) = A.SUBSID
AND A.REGION = 14
AND A.MEMTYPE <> 9
AND A.STATUS = :MEMSTATUS
AND EXISTS
(SELECT 1
FROM GROUP_SUBS_ATTR GSA, GROUP_SUBSCRIBER GS
WHERE GS.CUSTID = :CUSTID
AND GSA.SUBSID = GS.SUBSID
AND GSA.ATTRID = :ATTRID
AND GSA.ATTRVALUE = :ATTRVALUE
AND A.GROUPOID = GS.SUBSID
AND GS.REGION = 14
AND GSA.REGION = 14
AND (GS.STATUS NOT LIKE :PSSTATUS OR GS.STATUS = :OTHERSTATUS OR GS.STATUS = :OTHERSTATUS2)
)
ORDER BY GROUPOID, MEMSERVNUMBER
) M
)
WHERE LINE >= 0 AND LINE <= 50
执行计划如下:
从执行计划可以看出,exists子句返回的记录数较少,估值为1,实际为285。主查询返回了8755K,对exists子句做filter操作,效率是非常低的。这种情况就比较适合做unnest。在11g的版本,unnest一般情况下都是默认使用的,不知道为何在这里没有使用。
在Exists子句的select 后面加了/*+ unnest */的hint后,SQL只需要4秒钟就执行完了,为了能在sql monitor的图形页面显示,特意又在主查询的select 后面增加了 /*+ monitor */的hint,执行计划如下:
- 使用unnest Hint优化SQL
- 优化SQL HINT使用
- 使用hint优化 Oracle SQL语句方法
- 使用Hint优化复杂SQL案例-1
- 使用Hint优化复杂SQL案例-2
- SQL语句优化过程中,使用Hint
- SQL优化 - hint - driving_site
- 使用hint优化 Oracle SQL语句方法30例
- oracle中hint的使用-SQL语句优化
- ORACLE hint提示优化SQL
- sql优化---oracle hint样例
- oracle hint提示优化SQL
- ORACLE hint提示优化SQL
- SQL优化专题:Oracle HINT
- sql优化-hint的作用
- sql优化之hint运用
- sql优化之hint运用
- oracle三组难缠的hint no_unnest/unnest,push_subq,push_pred
- 流星语
- Java中 "abc" + '/'和"abc" + "/"的区别
- WebLogic和Tomcat浅谈
- 多核:操作系统3种处理模式(SMP+AMP+BMP)
- java 类加载器
- 使用unnest Hint优化SQL
- 保护模式下Intel 80x86 CPU 硬件中断过程
- libudev库接口的一些相关资料
- MySQL安装视频教程
- 免费开源的嵌入式 OS、GUI、fs、数据库等
- 通州新城玉带河大街雨水方沟工程完成并交付使用
- 堆栈经典应用-表达式求值
- iOS升到8.2收不到推送问题的解决(You've implemented -[ application:didReceiveRemoteNotification:fetchCompletionH )
- iOS开发笔记2 - 自定义tabbar