09月22日, 2014 139次
正文重要解说“Oracle索引范畴扫描的操纵过程是什么”。感爱好的伙伴无妨看看。正文引见的本领大略、赶快、适用。让边肖带你进修“Oracle索引范畴扫描的操纵过程是什么”!
索引扫描是依照根、枝、叶的程序读取,而后按照适合前提的数据的ROWID归来表中读取数据。即使要查问的数据列包括在索引中,则简略归来表的办法。叶地方在分支块中,分支块地方在根块中。即使找到分支块,就不妨找到叶块;即使找到根块,就不妨找到分支块。那么,怎样找到根块呢?
本质上很大略,在Oracle中,根块老是在索引段头的下一个块。所以,索引扫描不须要读取索引段头。开始在数据字典表中找到段头场所,块号加1即是根块场所。
接下来咱们来尝试一下。
创造尝试表。
SQLcreatetablet11asselect从dba_objects中采用*;
已创造。创造索引。
SQLcreateindexind _ t11 ont 11(object _ id);
索引已创造。搜集统计数据。
sqlexedcbms _ stats . gather _ table _ stats(own name= SCOTT ,tabname= T11 ,estimate_percent=100,cascade=true,method _ opt= for llcolumnsizeauto ,no _ invalidate=false);
pl/sqlprocedrecessfully completed。察看索引消息。
SQLselecttable_name,index_name,blevel,index_type,leaf _ blocksfromdba _ indexes where index _ name= IND _ T11 和andtable _ name= T11
表_称呼索引_称呼索引_典型叶_块
t11 ind _ t111 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=11
Plan 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=11
Plan 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索引范畴扫描操纵过程是什么”有了更深的领会,无妨来本质操纵一番吧!这边是网站,更多关系实质不妨加入关系频段举行查问,关心咱们,连接进修!