資料庫索引及結構

2022-07-12 07:15:07 字數 2203 閱讀 6932

索引是一種特殊的檔案,它包含著對資料表中所有記錄裡的引用指標

索引是一種資料結構。資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢、更新資料庫表中資料。

更通俗的來講,索引就相當於目錄。

索引的優點

索引的缺點:

可以通過alter table table_name add unique (column);建立唯一索引

可以通過alter table table_name add unique (column1,column2);建立唯一組合索引

可以通過alter table table_name add index index_name(column);建立唯一索引

可以通過alter table table_name add index index_name(column1,column2);建立唯一組合索引

雜湊索引類似於資料結構中的雜湊表(雜湊表)。當我們在資料庫中使用雜湊索引時,主要是通過hash演算法,將資料庫字段資料轉換成定長的hash值,與這條資料的行指標一併存入hash表中的位置;如果發生雜湊碰撞,則在對應hash鍵下以鍊錶的形式儲存。

但我們都知道,hash值是乙個無序的值,所以它無法進行範圍查詢,也不能利用hash值去做排序。還有,在hash碰撞的情況下,需要沿著鍊錶去乙個乙個的查詢,這樣降低了查詢的效率。

既然雜湊索引由於其無序的特性,使其無法應對範圍查詢、無法排序,且存在雜湊碰撞時效率下降的問題,而樹的結構解決了這個問題——它的資料有序排列,且支援範圍查詢。mysql中使用的是b+樹作為索引的資料結構。為了明白為什麼要使用b+樹索引,我們需要先從平衡二叉樹說起

(1) 平衡二叉樹

平衡二叉樹相比起雜湊索引,很好的解決了範圍查詢的問題,但平衡二叉樹仍然存在兩個問題:

1、在大量資料的情況下,樹的高度會很大。如圖所示的平衡二叉樹,一共存入了30個資料。可以看到,整棵樹一共有5層,而在最壞的情況下,需要向下查詢5次才能知道想要的資料。

2、在範圍查詢時,存在迴旋查詢的問題。比如在上面的圖中要查詢大於25的數,要先定位到25,然後再回到26->27,再回到28->29->30,然後把這些資料拿出來。假如要查詢的資料非常多,那麼在平衡二叉樹的結構中迴旋查詢的效率是非常慢的。

(2) b樹

可以看到,同樣是在插入30個資料的情況下,b樹要比平衡二叉樹更矮。

不同於平衡二叉樹,b樹的每個節點最多可以儲存n個有序的資料,同時還儲存著最多n+1個指向下一級節點的指標。以上圖為例,每個節點最多可以儲存2個資料,節點中最多有3個指向下一級節點的指標。以下面這個子樹為例:

根結點中兩個資料是26和28,比26小的資料儲存在最左邊的指標指向的結點,介於26和28的資料儲存在中間的指標指向的結點,大於28的資料儲存在最右邊的指標指向的結點

相較於平衡二叉樹,b樹更矮,乙個結點內能儲存更多的有序資料,因此在大量資料的情況下,不需要向更深處遍歷資料。

但b樹在範圍查詢方面有著和平衡二叉樹相同的問題:如果要查詢比25大的資料,b樹要先定位到25,再經歷26->27->28->29、30,在資料量大的情況下同樣要消耗大量時間。

(3) b+樹

為了解決在範圍查詢時,出現的迴旋查詢的問題,產生了b+樹的結構。相比起b樹,b+樹的非葉子結點僅具有索引的做引,不用來儲存資料。資料全部儲存在葉子結點中。葉子結點之間通過指標相互連線在一起,有序排列。

當使用b+樹查詢資料時,假如查詢8,先從根結點9開始,向左找到結點5,再向右找到結點7,再向右找到結點8,最後找到葉子結點8.

當使用b+樹進行範圍查詢時,假如找到比8大的資料,就先找到葉子結點8,然後向右遍歷,就能找到所有比8大的結點,其查詢效率要比b樹更高

資料庫 索引結構

btree結構 初始化介紹 乙個b 樹,淺藍色的塊,我們稱之為乙個磁碟塊。可以看到每個磁碟塊包含幾個資料項 深藍色所示 和指標 黃色所示 真實的資料都藏在葉子節點中,非葉子節點只儲存指引搜尋方向的資料項。結構種類 hash結構 full text結構 r tree結構 那些情況需要建立索引 1 主鍵...

資料庫索引及優化

資料庫索引 一 索引的概念 索引是一種排好序的快速查詢的資料結構。索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上。我們平常所說的索引,如果沒有特別指明,都是指b樹 多路搜尋樹,並不一定是二叉的 結構組織的索引。其中聚集索引 次要索引 覆蓋索引 復合索引 字首索引 ...

資料庫索引 資料結構

我們就來說一說其中的原因。改進後的b 樹基於b 樹,b 樹又基於b樹,所以我們先從b樹談起 我們還是以person id,name,age 這個例項來講訴b樹。b樹是這樣的乙個資料結構 d為大於1的乙個正整數,稱為b tree的度。h為乙個正整數,稱為b tree的高度。每個非葉子節點由n 1個ke...