Oracle执行计划-访问数据的存取方法(3种)

1、Full Table Scans,FTS(全表扫描)
为实现全表扫描,oracle读取表中所有行,并检查每一行是否满足语句的where限制条件。利用多块读(一个多块读操作可以使一个I/O能读取多块数据块)的方法可以十分高效地实现全表扫描,通过设置db_block_multiblock_read_count可以设置一次I/O能读取的数据块个数,从而减少全表扫描是的I/O总块数,也就是通过预读机制将要访问的数据块预先读入内存中。只有在全表情况下才能使用多块读操作。
使用全表扫描的前提:在较大的表上不建议使用全表扫描,除非取出数据比较多,超过总量的5%-10%,或者你想使用并行查询功能。
在这里插入图片描述

2、Table Access By Rowid(通过rowid存取表,rowid lookup)
行的rowid指出了改行所在的数据文件,数据块及行在该块中的位置,所以通过rowid来存取数据可以快速定位到目标数据上,是oracle存取单行数据最快的方法。这种方法不会用到多块读操作,一次I/O只能读取一个数据块。
在这里插入图片描述

3、Index Scan通过(索引扫描 index lookup)
在索引中,除了存储每个索引值外,索引还存储具有此值得行对应的rowid值,索引扫描分两步:
①扫描索引得到对应的rowid值;
②通过rowid读取具体数据。
每一步都是单独一次I/O,所以如果数据经限制条件过滤后的总量大于原表总行数的5%-10%,则使用索引扫描效率下降很多。而如果结果数据能够全部在索引中找到,则可以避免第二步操作,从而加快检索速度。

根据索引类型与where限制条件的不同,有4中类型的索引扫描:
(1)index unique scan(索引唯一扫描)
存在unique或者primary key的情况下,返回单个rowid数据内容。
在这里插入图片描述

(2)index range scan(索引范围扫描)
①在唯一索引上使用了range操作符(例如:>、<、<>、>=、<=、between);
②在组合索引上,只使用部分列进行查询;
③对非唯一索引上的列进行的查询。
在这里插入图片描述

(3)index full scan(索引全扫描)
需要查询的数据从索引中可以全部得到。

(4)index fast full scan(索引快速扫描)
与index full scan类似,但这种方法下不对结果进行排序。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值