还算深度解析Filter

本文探讨了Filter连接的概念,解释了其与嵌套循环的区别,并通过实例分析了Filter连接的产生原因、性能特点以及为何需要消除Filter连接。文章还提到了rownum在Filter连接中的作用,并提供了SQL改写建议。
摘要由CSDN通过智能技术生成

1.引出问题

我把Filter下面有两个结果集的查询成为Filter连接,虽然不严谨,但是为了好说明,在本博客后面,我们都叫做Filter连接。其实这个Filter连接和单表那种Filter一样,只不过是用驱动表的记录去筛选被驱动表的记录。

关于这种Filter,网上说算法类似嵌套循环,但是Filter会维护一个内存表,当驱动表扫描数据时,先在内存表里检索是否有相同的记录,如果有,直接在内存表取出缓存的记录,如果没有,再去被驱动表过滤出数据。

这么看,Filter的算法貌似优越于嵌套循环,但是为什么一般消除Filter呢?为什么Filter要缓存数据,而嵌套循环不去缓存呢?我们慢慢解读。

2.环境准备

drop table test1;

create table test1 as select * from dba_objects where owner='SCOTT';

insert into test1 select * from test1;

insert into test1 select * from test1;

drop table test2 ;

create table test2 as select rownum as rn, o.* from dba_objects o;

create index ix_test2_id on test2(object_id);

create index ix_test2_rn on test2(rn);

drop table test3 ;

create table test3 as select * from dba_objects;

create index ix_test3_id on test3(object_id);

commit;

3.Filter连接的几种写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值