Oracle执行计划-访问数据的存取方法(3种)
2022/1/29 19:04:32
本文主要是介绍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类似,但这种方法下不对结果进行排序。
这篇关于Oracle执行计划-访问数据的存取方法(3种)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享