几张图介绍MyISAM和InnoDB的数据分布以及主键索引和二级索引的数据分布区别
表结构:
create table layout_test (
col1 int NOT NULL,
col2 int NOT NULL ,
PRIMARY KEY (col1),
KEY (col2)
);
说明:表的主键值(col1)为1~100000,但是按随机顺序插入
列col2的值是1~100之间随机赋值,所以有很多重复的值。
MyISAM表(非聚簇索引):
数据分布图:
主键数据分布:
col2 列索引分布(事实上和主键索引分布没什么区别)
InnoDB的数据分布(支持聚簇索引,索引就是表,所以数据不像MyISAM那样需要独立存储)
主键分布(使用聚簇索引,每个叶子节点包含了主键值,事务id,用于事务和MVCC的回滚指针,以及所有剩余的列)
二级索引(col2列上的索引,和聚簇索引很不相同,二级索引的叶子节点包含索引列和主键列,存储的不是“行子针“,而是主键值)
最终对比图