聚簇索引以及InnoDB和MyISAM的存储和查询结构

定义

A clustered index is a special type of index that reorders the way records in the table are physically stored. Therefore table can have only one clustered index. The leaf nodes of a clustered index contain the data pages.

聚簇索引就是索引列的顺序与数据的物理存储地址顺序一致,因此一张表只能有一个聚簇索引,因为物理存储顺序是唯一的。聚簇索引的叶子节点包含了数据页。(PS:应该是聚簇索引一般为InnoDB中的主键列,主键上的索引会包含Row的所有值以及事务信息)

不同引擎的数据存储

MyISAM引擎的主键索引和二级索引几乎是一致的,可以理解为他们都带有指向硬盘上数据的指针,只是主键必须是唯一的,因此,MyISAM查询的时候会像下图一样,找到物理地址,获取数据。

InnoDB引擎的主键索引会存储行值,以及包括一些事务相关的值,图中只画出了主键(id)和行值(Name、Company);而InnoDB的二级索引则会存储索引值以及对应的主键值,如图中按照二级索引列Name进行查询,二级索引会先获取到Name为Ellison对应的主键值14,再去以主键14为条件查询对应的整行的值。如下图所示。
查询顺序

(图来自于https://blog.csdn.net/voidccc/article/details/40077329,voidccc)

以上图为例分析,InnoDB的主键是按顺序存储的,对应磁盘上的物理地址顺序,InnoDB主键列上的索引是聚簇索引。MyISAM则没有这一特性。

假设查询条件为30< id <100这一范围,在聚簇索引上只需要进行1次磁盘IO,因为数据都是连续的,而在非聚簇索引上则要进行多次的IO,因为数据和索引的顺序没有关系。

性能测试

待补充 今天吃鸡

延伸阅读:
https://blog.csdn.net/u014388408/article/details/50844179 (mysql索引原理之聚簇索引)
https://blog.csdn.net/lisuyibmd/article/details/53004848 (Mysql聚簇索引和非聚簇索引原理(数据库))
https://blog.csdn.net/voidccc/article/details/40077329 (剖析Mysql的InnoDB索引)

猜你喜欢

转载自blog.csdn.net/bduck2014/article/details/81005789
今日推荐