首先你要知道;
無論是Myisam和Innodb引擎,如果在建表的時候沒有顯示的定義一行主鍵列的話,他內部都會自動創建一個隱藏的主鍵索引;
主鍵索引以外的索引假設稱為次索引;首先Myisam和Innodb兩個都是默認采用的btree索引,可以腦補一顆二叉樹;
myisam引擎的數據在物理磁盤上是按照順序存儲的,而innodb引擎的表數據是隨機分布的;
myisam的主鍵索引的葉子節點只存放數據在物理磁盤上的指針,其他次索引也是一樣的;
innodb的主鍵索引的葉子節點下面直接存放數據,其他次索引的葉子節點指向主鍵id;
由此可以挖掘出一個問題,就是如果Innodb有大數據列,比如 varchar(300),這種比較多的話,那么排序的時候用主鍵id排序會比較慢,因為
id主鍵下面放着所有數據列,而Myisam就不需要掃描數據列,要解決這個問題的話可以再建一個和主鍵id一起的聯合索引;
索引覆蓋與回行:
如果要查找的數據恰好是索引列,那么就不用在去物理磁盤上去找數據了,就是不用回行,稱為索引覆蓋;