程序员笔记:索引 MyISAM 和 InnoDB 的区别

首先先明确一点,两者都是数据库引擎。

并且都是用B+树实现的,不懂B+树的,先去补一下,知道思想就行。

数据库的索引可以分为两类,一种是主键索引,还有一种是普通索引(就是非主键列去建立索引)

MyISAM 索引

MyISAM 的索引和行记录是分开的,相互独立。称为非聚集索引

并且主键索引和普通索引没什么区别,都是在索引(B+树)的叶子结点,

存储着值和一个对应的行引用id

ps:MyISAM的表可以没有主键

索引搜索过程是 先通过索引值在索引树上找到对应的引用,然后再去行记录中查找。

程序员笔记:索引 MyISAM 和 InnoDB 的区别

InnoDB

InnoDB的主键索引和行记录是存储在一起的,称为聚集索引

InnoDB的主键索引叶子节点记录着主键和行记录,普通索引叶子节点则记录着列的值和主键。

通过普通列值进行查找的时候(where name="eric"),会先到普通索引找到对应的主键,

再去主键索引找到这条记录,相当于扫描了两个索引树

程序员笔记:索引 MyISAM 和 InnoDB 的区别

建议,InnoDB的主键不要太过长,最好是用数据库自增的id

原文地址: https://mp.weixin.qq.com/s/FUXPXKfKyjxAvMUFHZm9UQ


分享到:


相關文章: