几张图介绍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表(非聚簇索引):

        数据分布图:

        几张图介绍MyISAM和InnoDB的数据分布以及主键索引和二级索引的数据分布区别_第1张图片

    主键数据分布:

    几张图介绍MyISAM和InnoDB的数据分布以及主键索引和二级索引的数据分布区别_第2张图片

    col2 列索引分布(事实上和主键索引分布没什么区别)

几张图介绍MyISAM和InnoDB的数据分布以及主键索引和二级索引的数据分布区别_第3张图片



InnoDB的数据分布(支持聚簇索引,索引就是表,所以数据不像MyISAM那样需要独立存储)

    主键分布(使用聚簇索引,每个叶子节点包含了主键值,事务id,用于事务和MVCC的回滚指针,以及所有剩余的列)

几张图介绍MyISAM和InnoDB的数据分布以及主键索引和二级索引的数据分布区别_第4张图片


    二级索引(col2列上的索引,和聚簇索引很不相同,二级索引的叶子节点包含索引列和主键列,存储的不是“行子针“,而是主键值)

几张图介绍MyISAM和InnoDB的数据分布以及主键索引和二级索引的数据分布区别_第5张图片



最终对比图

几张图介绍MyISAM和InnoDB的数据分布以及主键索引和二级索引的数据分布区别_第6张图片

你可能感兴趣的:(mysql)