91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle索引范圍掃描操作流程是什么

發布時間:2021-11-04 17:46:23 來源:億速云 閱讀:186 作者:iii 欄目:關系型數據庫

本篇內容主要講解“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=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索引范圍掃描操作流程是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延寿县| 太保市| 明水县| 文化| 桃园市| 台东市| 天等县| 东城区| 蒙山县| 手游| 从江县| 珲春市| 虞城县| 宣武区| 龙州县| 北川| 高邮市| 信阳市| 苍溪县| 高雄县| 斗六市| 凤城市| 周口市| 黄陵县| 泽库县| 丰台区| 阜新| 维西| 通海县| 门头沟区| 邢台市| 大荔县| 铜梁县| 浠水县| 灵璧县| 中牟县| 余江县| 开鲁县| 小金县| 太仓市| 蓬安县|