当前位置: 首页 > news >正文

什么是mysql索引回表?

什么是mysql索引回表?

在MySQL中,回表(Back to Table)是指在使用二级索引(非聚簇索引)进行查询时,MySQL需要根据索引中的指针回到聚簇索引(主键索引)中查找完整数据行的过程。

1. 索引结构回顾

  • 聚簇索引(Clustered Index)

    • 数据行的物理存储顺序与索引顺序一致。
    • 每张表只能有一个聚簇索引,通常是主键索引。
    • 叶子节点存储的是完整的数据行。
  • 二级索引(Secondary Index)

    • 叶子节点存储的是索引列的值和对应行的主键值。
    • 查询时,如果需要的列不在二级索引中,MySQL需要通过主键值回到聚簇索引中查找完整数据行。

2. 回表的过程

假设有一张表 user,结构如下:

CREATE TABLE user (
    id INT PRIMARY KEY,          -- 主键(聚簇索引)
    name VARCHAR(50),            -- 姓名
    age INT,                     -- 年龄
    INDEX idx_age (age)          -- 二级索引(age列)
);
查询示例

执行以下查询:

SELECT * FROM user WHERE age = 25;
查询步骤
  1. 使用二级索引

    • MySQL首先通过二级索引 idx_age 查找 age = 25 的记录。
    • 二级索引的叶子节点存储的是 age 值和对应的主键 id
  2. 回表操作

    • 如果查询的列(如 name)不在二级索引中,MySQL需要根据主键 id 回到聚簇索引中查找完整的数据行。
    • 这个过程就是回表

3. 回表的性能影响

  • 优点

    • 二级索引可以减少索引的大小,因为只存储索引列和主键。
    • 适合查询条件只涉及索引列的场景。
  • 缺点

    • 如果查询的列不在二级索引中,回表会增加额外的I/O操作,降低查询性能。
    • 当回表次数较多时(如范围查询或大量数据),性能开销较大。

4. 如何避免回表

  • 覆盖索引(Covering Index)

    • 创建一个包含所有查询字段的二级索引。
    • 例如,如果查询 SELECT id, age FROM user WHERE age = 25,可以创建一个 (age, id) 的联合索引,这样就不需要回表。
  • 减少查询字段

    • 只查询索引列,避免查询非索引列。

5. 示例优化

假设查询 SELECT id, name FROM user WHERE age = 25,可以通过以下方式避免回表:

  • 创建联合索引:
    CREATE INDEX idx_age_name ON user(age, name);
    
  • 这样,查询时可以直接从二级索引中获取 idname,无需回表。

总结

  • 回表是MySQL在使用二级索引时,为了获取完整数据行而进行的额外操作。
  • 回表会增加I/O开销,影响查询性能。
  • 通过覆盖索引减少查询字段,可以有效避免回表,提升查询效率。

相关文章:

  • jmeter-sample
  • 论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
  • 自定义MDCAdapter,进行线程池级别的日志ID传递
  • 安装 Powerlevel10k 及 Oh My Zsh 的使用
  • opencascade 源码学习几何变换 BRepBuilderAPI-BRepBuilderAPI_Transform
  • 【GB28181】RTSP服务器传输AAC音频
  • JVM垃圾收集器相关面试题(1)
  • WPS 接入 DeepSeek-R1 深度实践:打造全能AI办公助手
  • VXLAN 组播 RP
  • QT编程之QGIS
  • 【Flutter】数据库实体类构造函数加密注意事项
  • 深度学习有哪些算法?
  • 30、map 和 unordered_map的区别和实现机制【高频】
  • FreeRTOS之信号量
  • 【后端】【django】Django DRF `@action` 详解:自定义 ViewSet 方法
  • 微信小程序实现根据不同的用户角色显示不同的tabbar并且可以完整的切换tabbar
  • 母婴商城系统Springboot设计与实现
  • 冠珠瓷砖×郭培“惟质致美”品质主题片上映,讲述高定艺术背后的致美品质故事
  • SSM基础专项复习5——Maven私服搭建(2)
  • 1.2、Java中的私有方法
  • 国家发改委:系统谋划7方面53项配套举措,推动民营经济促进法落地见效
  • 大巴车高速上撞山致2死2伤,广东肇庆警方通报
  • 上海浦江游览南拓新航线首航,途经前滩、世博文化公园等景点
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开无条件谈判
  • 第十一届世界雷达展开幕,尖端装备、“大国重器”集中亮相