Oracle索引范围扫描操作流程是什么
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"Oracle索引范围扫描操作流程是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle索引范围扫描操作流程是什么"吧!索引范围
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
网络安全用到什么技术
网络安全后市分析
服务器维护单
数据库的规模和特点
宁波erp系统软件开发公司
网易云游戏如何切换服务器
iphone无线网络安全低
株洲服务器软件工程师寒假班
杭州工控软件开发哪家正规
升腾服务器如何挑选
网络安全活动周领导小组
锐捷网络自动化软件开发专业笔试
湖南金民互联网科技有限公司
电信服务器中有哪些模块
《网络安全法》的第三章
形容网络安全的由来
富阳服务器有充电桩
用于嵌入式平台的数据库
服务器管理员英文简写
卡卡网络技术有限公司游戏
服务器泄露电流要求多少
有关数据库的试题
网络安全实验网站
腾嘉琪互联网科技有限公司
数据库空密码修改
数据库中哪些可作为实体
tbc哪个服务器小战场好打
厦门易事软件开发有限公司
服务器ssh远程关机
襄阳公司 网络技术支持