首先你要知道;大數據
不管是Myisam和Innodb引擎,若是在建表的時候沒有顯示的定義一行主鍵列的話,他內部都會自動建立一個隱藏的主鍵索引;指針
主鍵索引之外的索引假設稱爲次索引;首先Myisam和Innodb兩個都是默認採用的btree索引,能夠腦補一顆二叉樹;排序
myisam引擎的數據在物理磁盤上是按照順序存儲的,而innodb引擎的表數據是隨機分佈的;索引
myisam的主鍵索引的葉子節點只存放數據在物理磁盤上的指針,其餘次索引也是同樣的;innodb
innodb的主鍵索引的葉子節點下面直接存放數據,其餘次索引的葉子節點指向主鍵id;二叉樹
由此能夠挖掘出一個問題,就是若是Innodb有大數據列,好比 varchar(300),這種比較多的話,那麼排序的時候用主鍵id排序會比較慢,由於數據
id主鍵下面放着全部數據列,而Myisam就不須要掃描數據列,要解決這個問題的話能夠再建一個和主鍵id一塊兒的聯合索引;db
索引覆蓋與回行:磁盤
若是要查找的數據剛好是索引列,那麼就不用在去物理磁盤上去找數據了,就是不用回行,稱爲索引覆蓋;myisam