MySQL索引-2聚集索引探讨

本文目录

概述

innoDB中的索引

MyISAM中的索引

总结与开发经验


概述

  • 聚集索引不是一种索引类型,而是一种数据存储方式,表示数据以主键索引的顺序进行聚集存储

  • 【聚集】表示数据行和主键聚簇存储在一起,数据行在磁盘的排列和索引排序保持一致

  • innoDB中聚集索引根据表的主键构建一个B+树来组织数据,这个树的叶子节点直接存储行数据

不同存储引擎的索引方式不同,比如MyISAM中就没有使用聚集索引。

接下来,详细分析MySQL中innoDB与MyISAM存储引擎中数据组织形式与索引方式,从而进一步认识聚集索引的特点。

探讨聚集索引前建议先了解MySQL索引结构,参考此文章:

【MySQL基础】MySQL中的数据结构&B+树_开发者笔记A的博客-CSDN博客

innoDB中的索引

设有如下数据表:

IDNAMECITY
5BobShanghai
8LeeBeijing
18SamWuhan
24RoseWuhan
40AlanNanjing
55HoboChengdu

innoDB的主键索引为聚集索引形式,示意图如下:

innoDB的主键索引中叶子节点存储的就是整个表的数据,可以说其主键索引文件与数据文件本质是同一个

在innoDB中,这种数据按照主键进行聚集的形式,叫做聚集索引。如果没有显示指定主键索引的话,MySQL会选取有非空且唯一约束的字段作为主键,如果这种字段也不存在,则自动创建一个隐藏字段作为主键,以确保数据可以按主键进行聚集。

而在innoDB中,辅助索引叶子节点存储的是主键值,如下图:

因此可以看出,通过辅助索引进行查询时,需要走两次索引:先走辅助索引获取主键,再走主键索引获取到数据。

MyISAM中的索引

在MyISAM同样存在主键索引和辅助索引,但是这两类索引本质并无区别,其叶子节点都是存储了数据的地址。示意如下:

所以说,MyISAM中的索引是非聚集的,即数据并不按照主键进行组织和聚集。

MyISAM中索引文件是独立于数据文件的,且通过主键索引和辅助索引查询数据的过程时一样的,这一点与innoDB不同。

总结与开发经验

  • 聚集索引并不是一种单独的索引类型,而是一种数据存储方式。聚集表示数据行和主键聚簇存储

    在一起,数据行在磁盘的排列和索引排序保持一致。

  • InnoDB中的主键索引是聚簇索引,其他索引(辅助索引)为非聚簇索引。

  • MyISAM中不使用聚集索引。

  • 聚集索引的优点:数据按照聚集索引排列顺序,当按主键进行搜索时,由于数据的聚集特点,MySQL不用频繁跨磁盘块提取数据,I/O次数减少,效率大大提高。

  • innoDB表的主键尽量选用单调字段,否则插入数据时需要调整B+树,使插入效率降低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值