• MYSQLg高级------回表


    查看回表之前大家需要 先对 聚簇索引和非聚簇索引 innoDB和MyISAM有一定的了解; 有兴趣看自行查看 :地址

    一、什么是回表?

    这先要从InnoDB的索引实现说起,InnoDB有两大类索引:

    聚集索引(clustered index)

    普通索引(secondary index)

    主键索引包含该行所有数据,普通索引包含的只有该索引和id

    其实非聚集索引 的过程就是所谓的回表;

    通俗的来讲就是:如果select 所需要获得列中有非索引列,一次索引查询不能获取所有的信息,需要到表中找到相应列的ID; 在根据ID去去查询
    对应表中具体的列的数据,这个过程就是回表;而根据一次索引查询就能获取所有列的信息,就不需要回表;(也就是聚集索引)

    CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(20) DEFAULT NULL,
    `deptId` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`) ,
    KEY `fk_dept_id`(`deptId`)
    )ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8;
    
    INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (1, '小闫', 10);
    INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (2, '老闫', 10);
    INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (3, '小闫01', 10);
    INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (4, '小闫02', 10);
    INSERT INTO `atguigudb`.`user` (`id`, `name`, `deptId`) VALUES (5, '小闫03', 10);
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    执行下面的就不需要回表,因为根据主键查询方式,只需要查询ID这颗B+树即可;主键是唯一的根据这个唯一索引,MYSQL就能确定搜索到这条记录;
    id为主键索引,主键索引就是聚集索引
    聚集索引的叶子节点包含整给行的记录,一次查询就能获取所有的信息,故不需要回表

    # 直接访问id 找到对应的值
    select id,name,deptId FROM USER WHERE name='3';
    
    • 1
    • 2

    下面这个sql就是需要回表的:因为name 是普通的索引,他的查询的方式,需要先查询name的索引树,然后得到id的主键为3,再到id索引树进行一次查询。即先定位主键值,再定位记录,再这个过程中虽然使用了索引,但实际上底层进行了两次索引的查询,这给过程就是回表

    #非聚簇索引 根据值找到id 根据id找到对应的值
    select id,name,deptId FROM USER WHERE name="小闫01";
    select id,name,deptId FROM USER WHERE name='3';
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    详细的 请查看 博客

    希望可以帮助大家更好的理解吧;不足之处,请大家批评指正;

  • 相关阅读:
    如何制作一个英语单词二维码?
    前端工作总结215-混入思路
    关于在Java中反转数组的4种详细方法
    flutter 使用texture实现Windows渲染视频
    SpringBoot + oss 实现文件上传
    Windows NFS 真弱 → 中文乱码导致文件找不到
    SQL Server报错:数据库"YourDatabaseName"的事务日志已满,原因为"LOG_BACKUP"
    基于视觉的果园路径识别论文汇总
    PMP证书在国内已经泛滥了,大家怎么看?
    从零玩转系列之微信支付实战PC端支付微信取消接口搭建 | 技术创作特训营第一期
  • 原文地址:https://blog.csdn.net/qq_42055933/article/details/126277282