聚簇索引以及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索引)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值