标签:index 索引 访问 扫描 Oracle 全表 rowid 存取方法 数据
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类似,但这种方法下不对结果进行排序。
标签:index,索引,访问,扫描,Oracle,全表,rowid,存取方法,数据 来源: https://blog.csdn.net/lin434406218/article/details/122745697
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。