首先你要知道;大数据
不管是Myisam和Innodb引擎,若是在建表的时候没有显示的定义一行主键列的话,他内部都会自动建立一个隐藏的主键索引;指针
主键索引之外的索引假设称为次索引;首先Myisam和Innodb两个都是默认采用的btree索引,能够脑补一颗二叉树;排序
myisam引擎的数据在物理磁盘上是按照顺序存储的,而innodb引擎的表数据是随机分布的;索引
myisam的主键索引的叶子节点只存放数据在物理磁盘上的指针,其余次索引也是同样的;innodb
innodb的主键索引的叶子节点下面直接存放数据,其余次索引的叶子节点指向主键id;二叉树
由此能够挖掘出一个问题,就是若是Innodb有大数据列,好比 varchar(300),这种比较多的话,那么排序的时候用主键id排序会比较慢,由于数据
id主键下面放着全部数据列,而Myisam就不须要扫描数据列,要解决这个问题的话能够再建一个和主键id一块儿的联合索引;db
索引覆盖与回行:磁盘
若是要查找的数据刚好是索引列,那么就不用在去物理磁盘上去找数据了,就是不用回行,称为索引覆盖;myisam