程序員筆記:索引 MyISAM 和 InnoDB 的區別

首先先明確一點,兩者都是數據庫引擎。

並且都是用B+樹實現的,不懂B+樹的,先去補一下,知道思想就行。

數據庫的索引可以分為兩類,一種是主鍵索引,還有一種是普通索引(就是非主鍵列去建立索引)

MyISAM 索引

MyISAM 的索引和行記錄是分開的,相互獨立。稱為非聚集索引

並且主鍵索引和普通索引沒什麼區別,都是在索引(B+樹)的葉子結點,

存儲著值和一個對應的行引用id

ps:MyISAM的表可以沒有主鍵

索引搜索過程是 先通過索引值在索引樹上找到對應的引用,然後再去行記錄中查找。

程序員筆記:索引 MyISAM 和 InnoDB 的區別

InnoDB

InnoDB的主鍵索引和行記錄是存儲在一起的,稱為聚集索引

InnoDB的主鍵索引葉子節點記錄著主鍵和行記錄,普通索引葉子節點則記錄著列的值和主鍵。

通過普通列值進行查找的時候(where name="eric"),會先到普通索引找到對應的主鍵,

再去主鍵索引找到這條記錄,相當於掃描了兩個索引樹

程序員筆記:索引 MyISAM 和 InnoDB 的區別

建議,InnoDB的主鍵不要太過長,最好是用數據庫自增的id

原文地址: https://mp.weixin.qq.com/s/FUXPXKfKyjxAvMUFHZm9UQ


分享到:


相關文章: