oracle 执行计划 access和filter的区别
admin
2023-04-22 05:42:13
0次

These two terms in the Predicate Information section indicate when the data source is reduced. Simply, access means only retrieve those records meeting the condition and ignore others. Filter means after you already got the data, go through them all and keep those meeting the condition and throw away the others.

1 access: 直接获取那些满足条件的数据,抛弃其他不满足的数据
2 filter: 你已经有了一些数据,对这些已经有的数据应用filter,得到满足filter的数据。

很多博客论坛都有如下结论:
access表示这个谓词条件的值将会影响数据的访问路径(表or索引),而filter表示谓词条件的值并不会影响数据访问路径,只起到过滤的作用。

但是这个结论很是含糊,而且容易歧义。很多人一看显示filter 就认为oracle没有访问索引路径的选择,肯定走全表扫描进行数据择取。真的是这样吗?

可以模拟如下场景:
create table test(aa int ,bb int ) as select rownum,rownum from dba_objects;(10w数据量)
create index .... 在aa上创建索引
select count(aa) from test where aa<500 ----access,index range scan
select count(aa) from test where aa<50000 ----- filter,index fast full scan
select count(bb) from test where aa<50000 ----filter ,table full scan
select aa,bb from test where aa<500 and bb=5
1 -- filter (bb=5)
2 --access(aa<500)
当然如果bb上建立了索引,那么filter,access的位置可能就会发生变化

明显access与filter跟是否走索引还是全表扫描无关。
上面access走索引范围扫描原因在于我只扫描到aa<500的index block我就返回结果了,而走索引快速扫描是对整个index做了扫描,相当于就是对10W条aa值对应的index block都进行扫描。那么这样区别就很明显了,filter其实可以认为在数据择取的过程中可能做了一些无用功,最终抛弃自己不需要的数据来择取最终需要的数据,而access 在数据择取方面更有针对性。也就是说access只是更倾向走索引(前提是索引存在而且合理的情况下)。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...