Mysql資料庫索引原理 InnoDB索引實現

2021-08-17 18:03:56 字數 977 閱讀 5936

innodb使用b+tree作為索引結構

例如有這麼乙個表資料:col1為主鍵

在innodb中,表資料檔案本身就是按b+tree組織的乙個索引結構,這棵樹的葉結點data域儲存了完整的資料記錄。這個索引的key是資料表的主鍵,因此innodb表資料檔案本身就是主索引。

圖1圖1是innodb資料檔案示意圖,可以看到葉結點包含了完整的資料記錄。這種索引叫做聚集索引。因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。

第二個與myisam索引的不同是innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址。換句話說,innodb的所有輔助索引都引用主鍵作為data域。例如,圖2為定義在col3上的乙個輔助索引:

圖2聚集索引這種實現方式使得按主鍵的搜尋十分高效;

輔助索引搜尋需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然後用主鍵到主索引中檢索獲得記錄。

了解了innodb的索引實現後,就很容易明白為什麼不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。再例如,用非單調的字段作為主鍵在innodb中不是個好主意,因為innodb資料檔案本身是一顆b+tree,非單調的主鍵會造成在插入新記錄時資料檔案為了維持b+tree的特性而頻繁的**調整,十分低效,而使用自增字段作為主鍵則是乙個很好的選擇。

mysql資料庫引擎 MyISAM和InnoDB

mysql 優化系列 一 mysql資料庫引擎效能測試 mysql 資料庫中,最常用的兩種引擎是innordb和myisam。innordb的功能要比myiasm強大很多,但是innordb的效能要比myisam差很多,如果你的 只是做簡單的查詢,更新,刪除,那麼用myiasm是最好的選擇。所有的效...

MySQL資料庫索引原理總結

mysql資料庫中索引 在mysql索引使用中,常常出現索引效能需要考慮的問題,那我們是否應當對索引原理進行深入思考。mysql中不同的儲存引擎使用的索引原理是不同的,下面介紹三種型別的索引型別b tree b tree hash。什麼是btree btree是一種高效的資料庫儲存結構,具體結構形式...

MySQL資料庫索引底層原理

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