MyISAM和InnoDB索引區別


首先你要知道;

無論是Myisam和Innodb引擎,如果在建表的時候沒有顯示的定義一行主鍵列的話,他內部都會自動創建一個隱藏的主鍵索引;

主鍵索引以外的索引假設稱為次索引;首先Myisam和Innodb兩個都是默認采用的btree索引,可以腦補一顆二叉樹;

myisam引擎的數據在物理磁盤上是按照順序存儲的,而innodb引擎的表數據是隨機分布的;


myisam的主鍵索引的葉子節點只存放數據在物理磁盤上的指針,其他次索引也是一樣的;

innodb的主鍵索引的葉子節點下面直接存放數據,其他次索引的葉子節點指向主鍵id;

由此可以挖掘出一個問題,就是如果Innodb有大數據列,比如 varchar(300),這種比較多的話,那么排序的時候用主鍵id排序會比較慢,因為

id主鍵下面放着所有數據列,而Myisam就不需要掃描數據列,要解決這個問題的話可以再建一個和主鍵id一起的聯合索引;


索引覆蓋與回行:

如果要查找的數據恰好是索引列,那么就不用在去物理磁盤上去找數據了,就是不用回行,稱為索引覆蓋;

like查詢覆蓋索引例子






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM