正文重要解说“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 |

-

Oracle索引范围扫描操作流程是什么 第1张

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索引范畴扫描操纵过程是什么”有了更深的领会,无妨来本质操纵一番吧!这边是网站,更多关系实质不妨加入关系频段举行查问,关心咱们,连接进修!