資料庫索引

2022-08-05 14:09:09 字數 1441 閱讀 3233

二叉樹:一個節點最多有兩個子節點

平衡樹:所有節點的深度差不大於1

查詢樹:節點的值是排序過的,左節點小於右節點

b+樹:按上面三種樹的分類,b+樹是多叉平衡查詢樹。

當我們要查詢值v時,就用v與節點中的keys一一對比(節點中的keys是有序的),確定出相應的childnode,然後再去childnode中對比。

//b+樹節點的資料結構

public class node

innodb引擎支援b+樹索引。

資料庫從大到小的結構可以分為段(segment)、區(extent)、頁(page)、表(table)、行(row),每個頁預設是16kb大小。b+樹資料結構中的節點就是這裡的頁,即innodb通過b+樹索引只能定位到頁,在頁中的繼續查詢就不是靠索引了。

在頁面中的查詢需要先用二叉法查詢目錄槽,然後根據目錄槽給出的大致位置再去順序查詢精確的行。

如果多個行記錄的主鍵為(1,2,3,4,5,6,7,8),那麼目錄槽可能就由其中的部分組成,如(1,5,8)。

資料庫中的b+樹往往層數比較少,一般在2~4層。資料庫查詢資料時,會一次性從磁碟中讀取多個連續的頁(即多個連續的b+樹節點)進記憶體。在記憶體中查詢目標索引和目標子節點。當從父節點跨層到子節點時,往往要重新進行一個磁碟讀取,而磁碟io往往是最耗時間的。為了減少磁碟io,樹的層數應該儘量少,但也不能太少,如果少到極致只有1層的話,那就退化為節點內的順序或者二叉查詢了。

以主鍵為索引建立b+樹,且葉子節點中有記錄的全部列資料。

聚集索引建立的b+樹只有一個。

以指定鍵值建立b+樹,且葉子節點中沒有全部列資料,葉子節點中有指定鍵值和該條記錄的主鍵。

輔助索引建立的b+樹可以有多個。

可以將多列合併作為一個索引,這幾個列是有順序的。如果將(col1,col2)作為聯合索引,會先排列col1,再排列col2.

覆蓋索引是指查詢過程在輔助索引樹上就可以結束,不需要到聚集索引樹上查詢。要達到這樣的效果,就需要將多個需要的列作為一個聯合索引建立起來。