美文网首页
数据库回表

数据库回表

作者: 乘风破浪丶文鑫 | 来源:发表于2022-02-07 17:42 被阅读0次

一张用于用户登录的user表:id、userName、Password三个字段

再根据查出来的user信息去对比密码是否正确
这时你发现username字段是唯一的又经常作为where条件所以可以给username字段建一个索引,于是就给username建了一个普通的B+Tree索引。这时候就出问题的,因为MySQL的InnoDB使用聚簇索引,具体的数据只和主键索引放在一起,其他的索引只存储了数据的地址(主键id)。比如上面的例子中,我根据username索引找到的只是一个username为admin这条数据的id而不是这条数据信息,所以要找到整条数据信息要根据得到的id再去找。看完上面的流程,你应该已经发现问题了,我要通过username找到id,再根据id找整条数据,这里有两个查找过程,这是影响效率的。就像上面的两个查找过程就是回表了。

SELECT * FROM user WHERE username = 'admin'

解决办法

使用覆盖索引可以解决上面所说的回表的问题。还是拿上面上面登录的例子来说,其实登录只需要判断用户名和密码,如果user表中有其他用户信息也是不需要的,那我们能不能只查询一次就找到这个用户名对应的密码呢。这个是可以的,上面所说的分两步查找,第一步根据username查找是肯定不能少的,那我们只要把password和索引username放到一起就可以了。我们可以建立一个(username、password)的组合索引,这里username一定要放在前面,然后我们把sql语句改一下

SELECT username, password FROM user WHERE username = 'admin'
或
SELECT password FROM user WHERE username = 'admin'

这样建立组合索引后根据username查找password,只要一步查找就可以查找到,因为password已经是username索引的一部分了,直接可以查出来,不再需要通过id找对应的整条数据。覆盖索引就是覆盖了多个列(字段)的索引。

那我们应该如何避免回表,因为如果用到了回表,就需要二次查询的过程,效率肯定更慢,很简单,回表是因为要查询的字段在非聚集索引里没有,所以在满足需求的情况下,我们尽量使非聚集索引里有要查询的索引字段。

在查询时,可以尽量用聚集索引来查(也就是用主键来查询),或者根据业务需求,建好的索引,满足索引查询字段。但是实际业务中,很难建立一个索引就能满足所有查询要求,所以,正常情况,回表也没事,只要能用到索引也能大大加快查询速度。

相关文章

  • 闪回功能

    闪回功能: 1:闪回数据库某一时刻,闪回数据库(flashback database) 2:使用闪回表将表内容还原...

  • Orace flashback

    oracle flashback 闪回功能,可以闪回删除的表数据,闪回drop的table以及闪回数据库到某个时间...

  • 什么是 MySQL 的“回表”?

    小伙伴们在面试的时候,有一个特别常见的问题,那就是数据库的回表。什么是回表?为什么需要回表? 今天松哥就来和大家聊...

  • 数据库、表、字段操作速览

    6.1 数据库操作 创建数据库 查看数据库 选中数据库 查看数据库中的表 删除数据库 6.2 数据表操作 创建表 ...

  • mysql常用语句

    登录数据库 展示数据库 展示表 查看messages表的结构 删除lovestory数据库 建立messages表...

  • Mysql教程

    DDL、DML语句 数据库 新建数据库 查询数据库 使用数据库 删除数据库 表 新建表 查询表 插入数据 修改数据...

  • mongodb基本命令

    连接数据库 显示所有数据库 使用数据库 查看表 插入数据 查询表数据 修改表数据 删除表数据 删除表 删除数据库

  • 12.shell中数据库操作

    打开数据库 退出数据库 显示数据库列表 查询数据库表 查询数据库表&输入重定向 插入表数据 案例1: 案例2:动态...

  • Mysql 数据库迁移

    1、设置当前使用数据库 为只读数据库,防止在迁移过程中有额外的数据: 2、 数据库导出1、导出数据和表结构: 敲回...

  • Linux 服务器操作MYSQL

    进入数据库命令 进入数据库 进入表 查询表

网友评论

      本文标题:数据库回表

      本文链接:https://www.haomeiwen.com/subject/ababkrtx.html