MySQL InnoDB索引相關

2021-10-10 13:53:21 字數 712 閱讀 2454

一般資料庫的資料(資料本身和結構維護資料)最終都是要落地到磁碟上,進行讀取的時候不可能一次性將所有資料全部載入到記憶體,所以記憶體中需要不停的置換磁碟上的內容,索引也是一樣,乙個資料庫的索引佔據的空間也是不小的資料,都是分頁載入的,所以需要合適的資料結構來儲存才能保持較好的效能,b樹就是用來儲存索引資料一種結構。

innodb引擎中,表資料是根據主鍵順序組織存放的,稱為索引組織表(index organized table),每張表都有乙個主鍵,如果建立表時沒有顯示的定義主鍵,會按照既定規則選擇或建立主鍵。既定規則如下:首選非空唯一索引(多個的話選最早建立的),沒有的話自動建立乙個6位元組大小的字段。

聚集索引(clustered index)是按照主鍵構造的一棵b+樹,葉子節點儲存著資料行,所以innodb的表資料實際是跟聚集索引融合的,也即聚集索引包含資料,資料被組織在聚集索引中。

b樹這個結構是專為訪問外部儲存裝置而設計的,主要思想就是一次批量讀取盡量合適的資料進記憶體,盡量避免頻繁訪問外部儲存。b樹的b一般認為是balance的意思,但是也沒有明確的出處,這個不要花時間糾結。b樹形態上的特點是矮胖,b樹是m叉多路平衡查詢樹。

二級索引:非聚簇索引就是二級索引,二級索引會儲存著主鍵id,通過二級索引的查詢需要回表。

回表:通過二級索引查詢到id後,在到聚簇索引下查詢真實資料行的動作。

覆蓋索引:select的字段被索引字段完全覆蓋,此時就不需要回表,可以直接在二級索引上,或是聚簇索引非資料行節點上取到資料。

關於 Mysql innodb的索引

關於innodb的索引,可以分為聚簇索引,輔助索引,都是以b tree 為底層資料結構。聚簇索引 只是資料的儲存方法。以主鍵為key,如果表中沒有主鍵,則會選擇乙個有唯一索引的列作為key,如果都沒有,innodb會為我們建立乙個唯一列作為key。所有的資料都存在葉子節點上,並且是按順序儲存的。如果...

MySQL Innodb 索引的原理

回想四年前,我在學習mysql的索引這塊的時候,老師在講索引的時候,是像下面這麼說的 索引就像一本書的目錄。而當使用者通過索引查詢資料時,就好比使用者通過目錄查詢某章節的某個知識點。這樣就幫助使用者有效地提高了查詢速度。所以,使用索引可以有效地提高資料庫系統的整體效能。嗯,這麼說其實也對。但是呢,大...

MySQL Innodb 索引的原理

回想四年前,我在學習mysql的索引這塊的時候,老師在講索引的時候,是像下面這麼說的 索引就像一本書的目錄。而當使用者通過索引查詢資料時,就好比使用者通過目錄查詢某章節的某個知識點。這樣就幫助使用者有效地提高了查詢速度。所以,使用索引可以有效地提高資料庫系統的整體效能。嗯,這麼說其實也對。但是呢,大...