資料庫 索引的底層原理

2021-10-21 03:28:02 字數 1588 閱讀 9154

索引的底層原理

mysql支援兩種索引,b+樹索引,雜湊表索引;

儲存引擎為myisam和innodb的索引結構:

myisam儲存引擎—主鍵索引(非聚集索引)

myisam引擎使用b+ 樹作為索引結構、葉節點的data域存放的是資料記錄位址

myisam中,主索引和輔助索引在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重複。

按照b+ 樹搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,讀取相應資料記錄。

innodb儲存引擎—主鍵索引(聚集索引)

innodb儲存引擎的主鍵索引,葉子節點中,索引關鍵字和資料是在一起存放的。索引關鍵字和資料一起儲存在葉子節點上。支援基於b- 樹的索引結構(mysql採用的b+ 樹索引結構)

b-樹是一種m階平衡樹,葉子節點都在同一層,由於每乙個節點儲存的資料量比較大,索引整個b-樹的層數是非常低的,基本上不超過三層。

由於磁碟的讀取也是按block塊操作的(記憶體是按page頁面操作的),因此b-樹的節點大小一般設定為和磁碟塊大小一致,這樣乙個b-樹節點,就可以通過一次磁碟i/o把乙個磁碟塊的資料全部儲存下來,所以當使用b-樹儲存索引的時候,磁碟i/o的操作次數是最少的(mysql的讀寫效率,主要集中在磁碟i/o上)。

innodb儲存索引—輔助索引

innodb的輔助索引,葉子節點上存放的是索引關鍵字和對應的主鍵,輔助索引的b+樹,先根據關鍵字找到對應的主鍵,再去主鍵索引樹上找到對應的行記錄資料。從索引樹可以看到,innodb的索引關鍵字和資料都是一起存放的,體現在磁碟儲存上。

例如:建立乙個user表,在磁碟上只儲存兩種結構,user.frm:儲存表的結構,user.idb:儲存索引和資料。

mysql預設儲存引擎:innodb;

那麼mysql最終為什麼要採用b+樹儲存索引結構呢,那麼看看b-樹和b+樹在儲存結構上有什麼不同?

1、b-樹的每乙個節點,存了關鍵字和對應的資料位址,而b+樹的非葉子節點只存關鍵字,不存資料位址。因此b+樹的每乙個非葉子節點儲存的關鍵字是遠遠多於b-樹的,b+樹的葉子節點存放關鍵字和資料, 因此,從樹的高度上來說,b+樹的高度要小於b-樹,使用的磁碟i/o次數少, 因此查詢會更快一些。

2、b-樹由於每個節點都儲存關鍵字和資料,因此離根節點近的資料,查詢的就快,離根節點遠的資料,查詢的就慢; b+樹所有的資料都存在葉子節點上,因此在b+樹上搜尋關鍵字,找到對應資料的時間是比較平均的,沒有快慢之分。

3、在b-樹上如果做區間查詢,遍歷的節點是非常多的;b+樹所有葉子節點被連線成了有序鍊錶結構,因此做整表遍歷和區間查詢是非常容易的。 雜湊索引當然是由雜湊表實現的,雜湊表對資料並不排序,因此不適合做區間查詢,效率非常低,需要搜尋整個雜湊表結構。

(mysql底層的資料結構這裡理解的還不清晰)

MySQL資料庫索引底層原理

綜述 mysql索引底層採用的是b樹和b 樹來實現。那為什麼是b樹和b 樹而不是其他諸如陣列 鍊錶 平衡二叉樹這些資料結構呢?下面來學習。1 資料庫檔案儲存方式 資料庫檔案都是以磁碟檔案儲存在系統中的,這也是資料庫能夠持久化儲存資料的原因。2 從資料庫讀取資料的原理 從資料庫中讀取資料,先不考慮從快...

資料庫 資料庫索引原理

正確的建立合適的索引 是提公升資料庫查詢效能的基礎 4.b tree 在兩大引擎中的體現 5.索引的原則 索引是為了加速對錶中資料行的檢索而建立的一種分散儲存的資料結構。索引能極大的減少儲存引擎需要掃瞄的資料量 索引可以把隨機io變成順序io 索引可以幫助我們在進行分組 排序等操作時,避免使 用臨時...

資料庫原理 索引

一 索引的概念 索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。二 索引的特點 1.索引可以加快資料庫的檢索速度 2.索引降低了資料庫插入 修...