Oracle中如何优化connect by语句
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,Oracle中如何优化connect by语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。执行SQL:SELECT A.CI, A
千家信息网最后更新 2025年01月22日Oracle中如何优化connect by语句
Oracle中如何优化connect by语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
执行SQL:
SELECT A.CI, A.ENBAJ02 AS CELL_NAME FROM TDL_CM_CELL A, T_ORG_CELL_SCOPE S WHERE S.REGION_NAME = A.REGION_NAME AND S.CITY_NAME = A.CITY_NAME AND (S.ORG_ID) IN (SELECT ID FROM T_ORG O START WITH ID = 101021003 --1010210 --START WITH ID=1 CONNECT BY PARENT_ID = PRIOR ID)
实际使用的执行计划:
而不会采用自适应计划(adaptive plan):
Plan Hash Value : 2596385940 ------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | ------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 2622 | 228114 | 227 | 00:00:01 | | 1 | NESTED LOOPS | | 2622 | 228114 | 227 | 00:00:01 | | 2 | NESTED LOOPS | | 2622 | 228114 | 227 | 00:00:01 | | * 3 | HASH JOIN | | 1 | 31 | 7 | 00:00:01 | | 4 | VIEW | VW_NSO_1 | 1 | 13 | 4 | 00:00:01 | | 5 | HASH UNIQUE | | 1 | 20 | 4 | 00:00:01 | | * 6 | CONNECT BY NO FILTERING WITH SW (UNIQUE) | | | | | | | 7 | TABLE ACCESS FULL | T_ORG | 75 | 825 | 3 | 00:00:01 | | 8 | TABLE ACCESS FULL | T_ORG_CELL_SCOPE | 85 | 1530 | 3 | 00:00:01 | | * 9 | INDEX RANGE SCAN | IDX_TDL_CM_CELL_SCOPE | 257 | | 8 | 00:00:01 | | 10 | TABLE ACCESS BY INDEX ROWID | TDL_CM_CELL | 2313 | 129528 | 220 | 00:00:01 | ------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): ------------------------------------------ * 3 - access("S"."ORG_ID"="ID") * 6 - access("PARENT_ID"=PRIOR "ID") * 6 - filter("ID"=101021003) * 9 - access("S"."REGION_NAME"="A"."REGION_NAME" AND "S"."CITY_NAME"="A"."CITY_NAME") Notes ----- - This is an adaptive plan
原因在于,oracle无法知道connect by之后的数量,所以只能认为是很大的量
--
有一种方式就是,就是使用提示来解决:
SELECT /*+ no_merge(x) use_nl(a x) */ A.CI, A.ENBAJ02 AS CELL_NAME FROM TDL_CM_CELL A, (select s.city_name, s.region_name from T_ORG_CELL_SCOPE S WHERE (S.ORG_ID) IN (SELECT ID FROM T_ORG O START WITH ID = 101021003 --1010210 --START WITH ID=1 CONNECT BY PARENT_ID = PRIOR ID) ) x where x.REGION_NAME = A.REGION_NAME AND x.CITY_NAME = A.CITY_NAME
这样计划就是:
Plan Hash Value : 37846894 --------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | --------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 2313 | 277560 | 227 | 00:00:01 | | 1 | NESTED LOOPS | | 2313 | 277560 | 227 | 00:00:01 | | 2 | NESTED LOOPS | | 2313 | 277560 | 227 | 00:00:01 | | 3 | VIEW | | 1 | 64 | 7 | 00:00:01 | | * 4 | HASH JOIN | | 1 | 31 | 7 | 00:00:01 | | 5 | VIEW | VW_NSO_1 | 1 | 13 | 4 | 00:00:01 | | 6 | HASH UNIQUE | | 1 | 20 | 4 | 00:00:01 | | * 7 | CONNECT BY NO FILTERING WITH SW (UNIQUE) | | | | | | | 8 | TABLE ACCESS FULL | T_ORG | 75 | 825 | 3 | 00:00:01 | | 9 | TABLE ACCESS FULL | T_ORG_CELL_SCOPE | 85 | 1530 | 3 | 00:00:01 | | * 10 | INDEX RANGE SCAN | IDX_TDL_CM_CELL_SCOPE | 257 | | 8 | 00:00:01 | | 11 | TABLE ACCESS BY INDEX ROWID | TDL_CM_CELL | 2313 | 129528 | 220 | 00:00:01 | --------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): ------------------------------------------ * 4 - access("S"."ORG_ID"="ID") * 7 - access("PARENT_ID"=PRIOR "ID") * 7 - filter("ID"=101021003) * 10 - access("X"."REGION_NAME"="A"."REGION_NAME" AND "X"."CITY_NAME"="A"."CITY_NAME")
关于Oracle中如何优化connect by语句问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
就是
问题
语句
更多
帮助
解答
很大
易行
简单易行
内容
原因
实际
小伙
小伙伴
数量
方式
方法
知识
篇文章
行业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国联通校招软件开发笔试题
人民日报的数据库怎么注册
idea调试远程服务器
深圳加油卡软件开发
网络安全提速时间
一台服务器可以搭建多少条ip
数据库用户表编写
越狱后出现数据库
域名 dns 服务器
中山专业服务器散热器订做
中兴手机有推送消息服务器
ibm服务器来不了机
Qt将数据库表打印出来
萧山区安卓软件开发
中等职业计算机网络技术课件
数据库技术三级的有效期
数据库插入char数据
外键如何删除数据库
共创软件开发有限公司怎么样
怎么重装数据库
数据库批量改表名
软件开发工作量客户不认可
网络安全及涉密工作
如何取消服务器raid磁盘阵列
服务器的配置及管理
阿里开源数据库
战争服务器测评
广东航天金税盘安全服务器地址
山东西瓜互联网科技有限公司
临汾招聘软件开发吗