本篇內(nèi)容主要講解“Oracle索引范圍掃描操作流程是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Oracle索引范圍掃描操作流程是什么”吧!
創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),修文網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:修文等地區(qū)。修文做網(wǎng)站價(jià)格咨詢(xún):18982081108
索引范圍掃描就是按照根、枝、葉的順序讀取,然后根據(jù)讀取到的滿(mǎn)足條件的數(shù)據(jù)的ROWID回到表中讀取數(shù)據(jù),如果要查詢(xún)的數(shù)據(jù)列包含在索引中那么就免去了回表這步驟。葉塊的地址在枝塊,枝塊地址在根塊。找到枝塊就可以找到葉塊,找到根塊就可以找到枝塊。那么,如何找到根塊呢?
其實(shí)很簡(jiǎn)單,在Oracle中,根塊永遠(yuǎn)在索引段頭的下一個(gè)塊處。因此,索引掃描是不必讀取索引段頭的。先在數(shù)據(jù)字典表中找到段頭位置,塊號(hào)加1就是根塊位置了。
接下來(lái)測(cè)試看看
–創(chuàng)建一個(gè)測(cè)試表
SQL> create table t11 as select * from dba_objects; Table created.
–創(chuàng)建索引
SQL> create index ind_t11 on t11(object_id); Index created.
–收集統(tǒng)計(jì)信息
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
–執(zhí)行一個(gè)簡(jiǎn)單查詢(xún)查看執(zhí)行計(jì)劃
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.
從執(zhí)行計(jì)劃可以看到在索引范圍掃描這一步消耗了3個(gè)邏輯讀,而索引的層高為1,說(shuō)明有兩層
觀察到的邏輯讀為4。這4次邏輯讀分別是:Root塊一次,葉塊兩次,回表讀取數(shù)據(jù)塊一次。
葉塊之所以需要兩次,是因?yàn)樗饕欠俏ㄒ坏?。第一次讀葉塊是為了取出目標(biāo)行ROWID,第二次讀葉塊是判斷此葉塊中還有沒(méi)有滿(mǎn)足條件的行。
如果建成了唯一索引,不需要判斷葉塊是否還有滿(mǎn)足條件的行,葉塊就只需要讀一次,一共只需要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.
到此,相信大家對(duì)“Oracle索引范圍掃描操作流程是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章名稱(chēng):Oracle索引范圍掃描操作流程是什么
分享路徑:http://muchs.cn/article46/pdjphg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、建站公司、外貿(mào)網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站維護(hù)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)