索引的INTERNAL 研究系列 之通過TREEDUMP檢視二叉樹索引的結構
索引的INTERNAL 研究系列 之通過TREEDUMP檢視二叉樹索引的結構
Kevin Zou
2011-8-29
一直覺得對索引的資料儲存理解不深,很多時候都是知其然不知其所然,趁現在有時間來研究一下。
覺得要真正研究透索引特性,索引的儲存,要看很多的資料,做很多的測試。
現在開始,爭取在一個月內完成。
如果要看索引在資料庫內的儲存總概述,可以通過TREEDUMP 命令來檢視。
先找到索引的物件ID,然後通過 ALTER SESSION SET EVENTS 'immediate trace name TREEDUMP level OBJECT_ID' 來DUMP TREEMAP。
|
DUMP出來的檔案描述了索引分佈在哪些BLOCK中,每個BLOCK的屬於LEAF還是BRANCHE節點,每個block中的內容。
結構說明:
branch/leaf代表該行是分支節點還是頁節點(第一行的branch其實是root節點):
branch: 表示該資料塊是branch block (第一行的branch其實是root節點 )
leaf: 表示該資料塊是leaf block
該節點的rdba,前面是16進位制的,後面是10進位制的:
0x40930a: 對應索引資料塊的十六進位地址;
4231946:對應索引資料塊的十進位地址
括號裡的第一個數字是同一個level的節點位置計數,root節點從0開始,其他的level從-1開始。
節點中當前的index entry數,從這兩個值可以分析出index的空間使用效率;
nrow: 485 :表示該索引資料塊中總的行數,包含被刪除的行;
rrow: 485:表示該索引資料塊中實際存在有效行數
一般每個索引物件儲存塊SEGMENT HEADER後第一塊,就是ROOT BLOCK。
我這裡I_TEST物件的儲存的BLOCK是從37641開始分配的空間,連續的32個block。一般索引是SEGMENT HEADER佔一個BLOCK(這個未經證實),而第二block=37641+1=37642就是root block.也是我們從TREEDUMP 中看到的第一個branch block的地址。
葉節點有個隱含的level引數,該引數值等於0,也就是說葉節點level 是從0開始的。一直往上直到root 節點。
除了可以看trace檔案來看BLEVEL的深度,也可以通過資料字典來檢視:
SQL> SELECT blevel FROM dba_indexes WHERE index_name = 'I_TEST';
BLEVEL
----------
1
那整個INDEX的高度計算公式是HEIGHT=BLEVEL+ 1;這個需要通過index_stats 試圖來檢視,檢視前需要先分析下索引結構
SQL> ANALYZE INDEX I_TEST VALIDATE STRUCTURE;
Index analyzed.
SQL> select height from index_stats where name ='I_TEST';
HEIGHT
----------
2
得到BLOCK的地址後,可以通過dbms_utility package 來查詢對應的FILE和BLOCK:
SQL> select dbms_utility.data_block_address_file(4231946) "file",dbms_utility.data_block_address_block(4231946) "block" from dual;
file block
---------- ----------
1 37642
-THE END-
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/40239/viewspace-706133/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用treedump事件檢視索引結構事件索引
- treedump研究下oracle索引的結構Oracle索引
- Oracle Treedump命令分析索引結構內部資訊Oracle索引
- B樹索引的內部結構索引
- 語法檢視錶結構,索引mysql索引MySql
- B樹索引和點陣圖索引的結構介紹索引
- 轉載-treedump索引讀取索引儲存的資料值--非唯一性索引索引
- 【Mongo】MongoDB索引管理-索引的建立、檢視、刪除MongoDB索引
- MySQL索引的結構MySql索引
- mysql 檢視索引MySql索引
- MongoDB之索引(過期索引)MongoDB索引
- 淺談索引系列之索引重建索引
- FAQ系列|MySQL索引之聚集索引MySql索引
- mysql檢視錶建立的索引MySql索引
- 雜湊,二叉樹,紅黑樹,B樹,B+樹,LSM樹等資料結構做索引比較二叉樹資料結構索引
- Mysql索引結構與索引原理MySql索引
- Sql Server關於indexed view索引檢視的總結SQLServerIndexView索引
- Oracle 索引的使用情況檢視Oracle索引
- mysql 建立索引的方法--建立檢視MySql索引
- mongodb 如何檢視索引MongoDB索引
- 二叉樹的右檢視 (中等)二叉樹
- 檢視錶、檢視、索引、儲存過程和觸發器的定義的方法索引儲存過程觸發器
- InnoDB學習(七)之索引結構索引
- 資料結構之索引堆(IndexHeap)資料結構索引Index
- Linux 下樹形結構的檢視Linux
- SQLSERVER的非聚集索引結構SQLServer索引
- MySQL 索引結構MySql索引
- dump索引結構索引
- 資料結構之「二叉樹」資料結構二叉樹
- 二叉樹的子結構二叉樹
- Oracle索引梳理系列(六)- Oracle索引種類之函式索引Oracle索引函式
- MSSQL索引檢視(indexed view)之簡述及使用SQL索引IndexView
- mysql建立索引和檢視MySql索引
- Java物件導向系列[v1.0.0][索引與檢視]Java物件索引
- 使用index_stats檢視檢視索引效率Index索引
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- .NET Core技術研究系列-索引篇索引
- [20141008]使用bbed檢視索引結構.txt索引