Oracle索引范围扫描操作流程是什么
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,本篇内容主要讲解"Oracle索引范围扫描操作流程是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle索引范围扫描操作流程是什么"吧!索引范围
千家信息网最后更新 2024年11月11日Oracle索引范围扫描操作流程是什么
本篇内容主要讲解"Oracle索引范围扫描操作流程是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle索引范围扫描操作流程是什么"吧!
索引范围扫描就是按照根、枝、叶的顺序读取,然后根据读取到的满足条件的数据的ROWID回到表中读取数据,如果要查询的数据列包含在索引中那么就免去了回表这步骤。叶块的地址在枝块,枝块地址在根块。找到枝块就可以找到叶块,找到根块就可以找到枝块。那么,如何找到根块呢?
其实很简单,在Oracle中,根块永远在索引段头的下一个块处。因此,索引扫描是不必读取索引段头的。先在数据字典表中找到段头位置,块号加1就是根块位置了。
接下来测试看看
-创建一个测试表
SQL> create table t11 as select * from dba_objects;Table created.
-创建索引
SQL> create index ind_t11 on t11(object_id);Index created.
-收集统计信息
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T11',estimate_percent=>100,cascade=>true,method_opt=>'for all columns size auto',no_invalidate=>false);PL/SQL procedure successfully completed.
-查看索引信息
SQL> select table_name,index_name,blevel,index_type,leaf_blocks from dba_indexes where index_name='IND_T11' and table_name='T11';TABLE_NAME INDEX_NAME BLEVEL INDEX_TYPE LEAF_BLOCKS------------------------------ ------------------------------ ---------- --------------------------- -----------T11 IND_T11 1 NORMAL 161
-执行一个简单查询查看执行计划
SQL> select * from table(dbms_xplan.display_cursor('','','allstats last'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID g7411gwcvppnd, child number 0-------------------------------------select * from t11 where object_id=11Plan hash value: 469757982-------------------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |-------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 4 || 1 | TABLE ACCESS BY INDEX ROWID| T11 | 1 | 1 | 1 |00:00:00.01 | 4 ||* 2 | INDEX RANGE SCAN | IND_T11 | 1 | 1 | 1 |00:00:00.01 | 3 |-------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 2 - access("OBJECT_ID"=11)19 rows selected.
从执行计划可以看到在索引范围扫描这一步消耗了3个逻辑读,而索引的层高为1,说明有两层
观察到的逻辑读为4。这4次逻辑读分别是:Root块一次,叶块两次,回表读取数据块一次。
叶块之所以需要两次,是因为索引是非唯一的。第一次读叶块是为了取出目标行ROWID,第二次读叶块是判断此叶块中还有没有满足条件的行。
如果建成了唯一索引,不需要判断叶块是否还有满足条件的行,叶块就只需要读一次,一共只需要3次逻辑读。
drop index ind_t11;SQL> drop index ind_t11;Index dropped.create unique index ind_t11_1 on t11(object_id);SQL> create unique index ind_t11_1 on t11(object_id);Index created.select * from t11 where object_id=11;SQL> select * from table(dbms_xplan.display_cursor('','','allstats last'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID g7411gwcvppnd, child number 0-------------------------------------select * from t11 where object_id=11Plan hash value: 645999193------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 3 | 4 || 1 | TABLE ACCESS BY INDEX ROWID| T11 | 1 | 1 | 1 |00:00:00.01 | 3 | 4 ||* 2 | INDEX UNIQUE SCAN | IND_T11_1 | 1 | 1 | 1 |00:00:00.01 | 2 | 4 |------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 2 - access("OBJECT_ID"=11)19 rows selected.
到此,相信大家对"Oracle索引范围扫描操作流程是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
索引
范围
数据
逻辑
流程
条件
查询
位置
信息
内容
地址
就是
学习
测试
实用
更深
接下来
之所以
兴趣
字典
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大陇客评网络安全
设置一个数据库字段唯一
数据库删除没有学生的系
清空数据库值为空
开发环境基础工程及数据库
有声博达软件开发
悦跑圈服务器崩了
软件开发的螺旋模型的优点
摩羯软件开发工程师
软件开发日费用
移动首选DNS服务器
判断数据库是否连接成功
模糊数据库的具体实例
电科院网络安全研究所在哪
计算机学院网络安全责任制度
武汉英泰斯特软件开发
网络安全网络探针
java 插入数据库类
软件开发 小猪
什么是网络安全合规
网络安全应急预案论文
数据库设计与技术 实验报告
网络技术 题库
数据库用于存储二进制数据的是
陕西思安信息网络技术有限公司
如何将旧电脑改造成数据库
番禺区数据网络技术开发分类
无锡挑选软件开发商店
ipad邮箱服务器不可用
通信导航网络安全