索引的儲存結構

2022-02-14 19:23:00 字數 1080 閱讀 2825

下面是本人畫的一張關於資料頁和索引儲存結構圖

此圖中,最上部分是資料頁的儲存結構。

下半部分是表中有索引,這裡就出現了b-tree結構,索引的根級會引用索引的下一級,直到索引的最後一級,這一級引用的物件是rid(當表中不存在聚集索引時,rid會指向每一行資料儲存位置,rid的字段長度為16位元組)或聚集索引列(當表存在索引時,聚集索引指向每一行資料儲存位置)。

如果乙個表每行儲存200個字元,那麼乙個8kb頁面最多儲存8060/200=40行資料。如果索引的字段是20個位元組,表中聚集索引欄位為16個位元組或者沒有聚集索引,那麼索引行的長度為20+16=36個位元組,每乙個8kb索引頁儲存索引的行數為8060/20=223行,也就是說:當資料小於223行時,索引只需要1個8kb頁面,而資料則需要223/40=6個8kb頁面。當資料大於223行時,索引頁會分頁,分成兩個索引頁,此時,會出現更高一級的索引節點,該節點引用它的下一級節點。此時,索引有2級,根級和子頁級。根級儲存的是對子頁級的引用,此時,儲存的資料最多為223*223行,如果資料繼續增加,那麼根級會再次分頁並變成第一子頁級,同時生成新的根級,也就是上面圖的結果,這個時候索引有3級,儲存的最大資料為223*223*223。

當需要查詢一行資料所有的列時,查詢分析器只需要掃瞄4次就可以找資料。

注意:

1、  當表存在聚集索引時,並且只需要查詢聚集索引鍵值,而查詢條件使用到索引時,那麼查詢一次只需要掃瞄3次則可以找到資料,因為不需要掃瞄資料頁級。如果查詢的是整行,則需要掃瞄4次,多出來的一次是掃瞄資料頁。

2、  當表不存在聚集索引時,查詢某列(非索引列)或整行資料時,查詢一次需要掃瞄4次才能找到資料,因為需要掃瞄資料頁。

如果沒有索引時,查詢某一行資料,就需要逐行逐行的掃瞄,所以就會出現全表掃瞄或聚集索引掃瞄的情況。

上面的列子中,乙個8kb資料頁最多只能儲存40行資料,而乙個索引頁最多可以儲存223行資料,這裡可以看出來索引的乙個作用,縮小掃瞄的次數,用來提公升效能。這就是以空間換取效能的結果。

資料儲存 索引結構

b樹是為磁碟儲存而專門設計的一類平衡搜尋樹,b樹的高度僅隨著它所包含的節點數按對數增長,不過因為單個節點可以包含多個關鍵字,所以對數的底數可以比較大,實際應用中一般是50 2000,給個直觀的數字,一棵分支因子為1001 高度為2 不包含根節點 的b樹,可以儲存超過10億個關鍵字!計算機的機械磁碟,...

索引儲存結構和分塊 索引 查詢

索引儲存結構 索引儲存結構 資料表 索引表 索引表 index blocked table 中的每一項稱為索引項,索引項的一般形式 關鍵字,位址 舉個例子 分塊查詢的基本思想 分塊查詢又稱分塊索引查詢 index blocked search 是一種介於順序查詢和二分查詢之間的查詢方法。其基本思想是...

mysql的索引儲存資料結構

我們mysql底層的索引儲存資料結構是按照b 樹方式來儲存的,也是從b樹結構演變而來。我們知道索引就是類似我們的書本的目錄頁,儲存要找的內容所在的頁數。b樹的結構 葉節點具有相同的深度,葉節點的指標為空 所有索引元素不重複 節點中的資料索引從左到右遞增排列 b 樹的結構 非葉子節點不儲存data,只...