Oracle索引范围扫描操作流程是什么
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容主要讲解"Oracle索引范围扫描操作流程是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle索引范围扫描操作流程是什么"吧!索引范围
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
软件开发文档模板百度网盘
web 服务器安全
数据库采购
计算机网络技术培训学校
网络安全银行牌照
泾县网络安全工作会议
设定数据库的临时表空间
虎牙贱圣2022回放服务器
网络安全法对网络运营者
整合型证据数据库是什么
统计数据库查询耗时
华硕软件开发笔记本电脑配置
数据库技术方向包括
网络技术如何影响民主政治的发展
网络安全相关专业毕业生人数
神犬财务用的什么数据库
广东惠州市网络安全战略支援部队
软件开发行业存在的主要问题
科技星链互联网
数据库要会英文吗
数据库 剔重
剑与家园移动服务器
查询分析器备份数据库
刀剑乱舞服务器满员
安装数据库软件的心得体会
软件开发 看不到未来
数据库管理平台 本地化
微软vr一体机软件开发
日本的宽带服务器
服务器辐射的安全距离