MySql索引

一、InnoDB存储引擎中,聚簇索引 和 非聚簇索引(也称为二级索引)都是重要的组成部分:

1. 聚簇索引:

        每个InnoDB表都有一个聚簇索引,它通常位于主键上。如果没有明确定义主键,InnoDB会选择一个唯一的非空索引作为聚簇索引,或者创建一个隐藏的聚簇索引来存储行数据。

        聚簇索引的特点是,非主键列的值会根据聚簇索引的顺序存储在叶子节点上,这意味着聚簇索引的叶子节点包含了非索引列的所有数据。

2. 非聚簇索引:

        非聚簇索引或二级索引不包含所有的行数据。它们只包含索引列的值和主键列的值(或隐藏聚簇索引的行定位器)。

        当通过非聚簇索引查找数据时,InnoDB首先在二级索引中找到主键值,然后根据这个主键值去聚簇索引中查找完整的行数据。(这里也就是回表)

InnoDB的索引结构允许它在不同的索引上执行高效的查找、范围查询和排序操作。聚簇索引和非聚簇索引共同工作,提供了灵活的数据访问方式,优化了查询性能。

聚簇索引和非聚簇索引在InnoDB中的使用是自动的,用户不需要手动配置,只需定义表结构和索引即可。InnoDB会根据这些定义自动维护索引结构,并在查询操作中使用它们。

二、回表:

非聚簇索引 通过主键值去聚簇索引 中查询数据的过程通常被称为“回表”。

这里是这个过程的详细说明:

1. **非聚簇索引查询**:当执行一个基于非聚簇索引的查询时,数据库首先在二级索引中查找,这个索引只包含非主键列的值和对应的主键值(或行定位器)。

2. **获取主键值**:在二级索引的叶子节点中,查询会找到与搜索条件匹配的主键值。

3. **回表**:一旦有了主键值,数据库接下来会在聚簇索引中使用这个主键值进行查找。这个过程就是所谓的“回表”,因为数据库从二级索引“回退”到主索引来检索完整的行数据。

4. **检索行数据**:在聚簇索引中,根据主键值找到具体的行数据,完成查询。

回表是数据库查询优化的一部分,数据库查询优化器会评估使用非聚簇索引和聚簇索引的成本,选择一个最有效的查询路径。如果二级索引能够显著减少需要扫描的数据量,即使需要额外的回表步骤,使用二级索引也可能是更优的选择。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值