MySQL InnoDB 引擎中的聚簇索引和非聚簇索引

为了更好地理解聚簇索引和非聚簇索引的概念,我们可以通过一个 图书馆的书架 的比喻来形象地说明它们的工作原理和特点。


1. 聚簇索引
1.1 比喻:按书名排序的书架
  • 想象一个图书馆的书架,所有的书都按照书名的字母顺序(A~Z)排列。

  • 书的位置就是它的索引位置,书名就是索引键。

1.2 查找过程
  • 场景:坤爸让小坤买一本《唐诗三百首》。

  • 过程:小坤目标明确,直接在书架上按照书名的字母顺序查找,很快找到了这本书。

1.3 特点
  1. 物理顺序

    • 书的物理位置就是它的索引位置。

    • 例如,如果要找《哈利波特》,直接按照字母顺序到 "H" 开头的区域查找。

  2. 唯一性

    • 每本书的书名是唯一的,就像数据库中的主键一样。

  3. 只能有一个

    • 书架只能按照一种方式(比如书名)排列,不能同时按照书名和作者名排列。

  4. 插入新书

    • 如果有一本新书《坤说》,需要插入到 "K" 开头的区域,可能会导致书架上的书重新排列(数据页分裂)。


2. 非聚簇索引
2.1 比喻:书架旁边的分类标签
  • 书架旁边有一些分类标签,按照主题、作者等信息分类。

  • 书的物理位置仍然按照书名排列,但分类标签提供了另一种查找方式。

2.2 查找过程
  • 场景:坤爸让大坤买一本儿童读物类的书。

  • 过程

    1. 大坤先在儿童读物的分类标签中找到《唐诗三百首》。

    2. 然后根据标签上的位置信息,去书架上找到这本书。

2.3 特点
  1. 逻辑顺序

    • 分类标签按照主题、作者等信息分类,但书的物理位置仍然按照书名排列。

    • 例如,如果你想找作者是 "坤坤" 的书,先在分类标签中找到 "坤坤",然后根据标签上的位置信息去书架上找书。

  2. 多个索引

    • 图书馆可以有多个分类标签,比如按照作者、主题等分类。

  3. 插入新书

    • 如果有一本新书《Man》,只需要在分类标签中添加一条记录,书的物理位置不需要改变。

  4. 回表操作

    • 因为书架上的书是按照书名排列的,所以你需要先通过分类标签找到书名,再按照书名查找书的位置。这个过程称为 回表


3. 聚簇索引 vs 非聚簇索引
特性聚簇索引非聚簇索引
物理顺序数据行的物理顺序与索引顺序一致数据行的物理顺序与索引顺序无关
唯一性索引键唯一(通常是主键)索引键可以重复
数量每张表只能有一个聚簇索引每张表可以有多个非聚簇索引
插入操作可能导致数据页分裂只需更新索引,不影响数据行的物理位置
查找过程直接通过索引找到数据行先通过索引找到主键,再通过主键查找数据行(回表)

4. 总结
  • 聚簇索引:数据行的物理顺序与索引顺序一致,查找效率高,但插入操作可能导致数据页分裂。

  • 非聚簇索引:数据行的物理顺序与索引顺序无关,支持多个索引,但查找时需要回表操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值