SQL优化案例-使用with as优化Subquery Unnesting(七)
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,使用 no_unnest hint可以让执行计划产生filter,即不展开,但一般情况下使用unnest hint无法消除filter。如下SQL,找出库中非唯一索引,那么大家可能会这么写SQL:SE
千家信息网最后更新 2026年11月01日SQL优化案例-使用with as优化Subquery Unnesting(七)
使用 no_unnest hint可以让执行计划产生filter,即不展开,但一般情况下使用unnest hint无法消除filter。
如下SQL,找出库中非唯一索引,那么大家可能会这么写SQL:
SELECT SEGMENT_NAME,SUM(BYTES/1024/1024) m FROM DBA_SEGMENTS WHERE SEGMENT_NAME NOT IN (select index_name from dba_indexes where UNIQUENESS ='NONUNIQUE') GROUP BY SEGMENT_NAME;
耗时一分钟,为什么这么慢呢?在SQL语句where子查询后有not in、not exists、in、exists时,CBO会尝试将子查询展开(unnest)消除filter,但是上面的例子CBO并没有做到,下面我们看下执行计划。
我们再看下在子查询中加unnest hint的执行计划:
SELECT SEGMENT_NAME,SUM(BYTES/1024/1024) m FROM DBA_SEGMENTS WHERESEGMENT_NAME NOT IN (select /*+UNNEST */index_name from dba_indexeswhere UNIQUENESS ='NONUNIQUE') GROUP BY SEGMENT_NAME;
filter消除,CBO将基于数据字典底层的基表重新组合,使执行计划变成hash joinanti,0.23秒便执行完成了。
下面我们再来看下通过with as materialize优化subquery unnesting的例子。
SQL如下:
select AREA_NAME,sum(reve)from t_order o where exists (select AREA_ID from t_customer c where nation = 'Aus' and c.AREA_ID = o.AREA_ID union select AREA_ID from f_customer f where nation = 'US' and f.AREA_ID <> o.f_area_id) group by AREA_NAME;
selectsum(bytes/1024/1024) M from dba_segments where segment_name ='F_CUSTOMER'; M---------- 192
表F_CUSTOMER192M

执行计划如下:
我们看到并不走索引,要近2个小时执行完成,通过建立组合索引,让其走index_ffs
CREATE INDEX IDX_FFS_NATION_ID ONf_customer(AREA_ID,nation,0);

8分钟执行完成,那么还有没有更好的办法呢?
如下:
with x as ( select /*+ materialize */ AREA_ID from f_customer f where nation = 'US') select AREA_NAME,sum(reve)from t_order o where exists (select AREA_ID from t_customer c where nation = 'Aus' and c.AREA_ID = o.AREA_ID union select AREA_ID from x where x.AREA_ID <> o.f_area_id) group by AREA_NAME;
在FILTER中,NOT IN(NOT EXISTS)后的SQL语句多次执行,本来数据量就很大,每次都要执行一遍,结果可想而知。但是使用HINT MATERIALIZE和WITH AS 结合使用,把表中部分列实体化,执行过程中会创建基于视图的临时表。这样就不会每次NOT EXISTS都去执行一遍大数据表的扫描或者大的索引快速扫描,并且当表的数据越大,表越宽,这样的优化效果越明显。
| 作者简介
姚崇·沃趣科技高级数据库技术专家
熟悉Oracle、MySQL数据库内部机制,丰富的Oracle、MySQL故障诊断、性能调优、数据库备份恢复、复制、高可用方案及迁移经验。
数据
索引
数据库
查询
例子
语句
组合
很大
高级
可想而知
专家
会创
作者
办法
备份
字典
实体
小时
底层
性能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司简介
互联网科技网
互联网佳科技有限公司
安徽鑫晟辉互联网科技
北京禾田雨橡互联网科技
齐家互联网科技有限公司
狮子座互联网科技培训
互联网科技宣传片
互联网科技创新企业排名
华脉科技工业互联网产品
博兴的互联网电子科技公司
全球顶尖互联网科技公司
移动互联网科技公司
注册互联网科技公司经营范围大全
工业互联网山东科技大学
互联网时代的科技公司
中国新注册互联网科技
互联网界的黑科技
张家口科技产业互联网平台
东风日产互联网科技公司叫什么
互联网金融科技
广州宏创互联网科技
凡科互联网科技
无锡溥仪互联网科技有限公司
互联网汽车科技小镇
中国科技互联网公司收入
互联网科技和信息
科技类公司包括互联网吗
领航科技大厦互联网公司
南京一网一红互联网科技有限公司