首先先明确一点,两者都是数据库引擎。
并且都是用B+树实现的,不懂B+树的,先去补一下,知道思想就行。
数据库的索引可以分为两类,一种是主键索引,还有一种是普通索引(就是非主键列去建立索引)
MyISAM 索引
MyISAM 的索引和行记录是分开的,相互独立。称为非聚集索引
并且主键索引和普通索引没什么区别,都是在索引(B+树)的叶子结点,
存储着值和一个对应的行引用id
ps:MyISAM的表可以没有主键
索引搜索过程是 先通过索引值在索引树上找到对应的引用,然后再去行记录中查找。
InnoDB
InnoDB的主键索引和行记录是存储在一起的,称为聚集索引
InnoDB的主键索引叶子节点记录着主键和行记录,普通索引叶子节点则记录着列的值和主键。
通过普通列值进行查找的时候(where name="eric"),会先到普通索引找到对应的主键,
再去主键索引找到这条记录,相当于扫描了两个索引树
建议,InnoDB的主键不要太过长,最好是用数据库自增的id
原文地址: https://mp.weixin.qq.com/s/FUXPXKfKyjxAvMUFHZm9UQ
閱讀更多 上弦孤月c 的文章