MySql中什么是回表? 如何减少回表的次数

背景

在InnerDB中, B+数的叶子节点存储数据的索引是聚集索引,也就是我们说的主键索引,而B+数的叶子节点存储主键索引的是非聚集索引,也就是其他的索引 普通索引 唯一索引 组合索引,也就是非主键索引,在InnerDB中 主键索引就是他的叶子节点上面存储着我们想要的这一行数据,而非主键索引则存在着是主键索引的值

什么是回表?

所谓的回表,就是指的是我们根据非主键索引,找到主键的值,再根据主键的值, 找到该索引上对应的叶子节点的值, 这个过程我们称之为回表,其实也很好理解

再INNERDB中, 我们使用的主键索引查询的时候效率更高, 因为直接拿到对应这一行的数据, 不需要回表,比如索引覆盖和索引下推技术, 也可以减少回表的次数

什么是索引下推和索引覆盖

首先我们创建一个组合索引

create index indextest on tablename key1 key2 key 3

索引下推 :查询过程中,比如我们有一个组合索引

首先mysql会先查询到key1=123的列, 再根据这些列返回对应的key2和key3符合条件的值进行筛选

sql 复制代码
        select  字段  from tablename where key1=123  and key2="%***"  and key3="%****"

索引覆盖:在查询的过程中, 查询的值就在组合索引上,不需要回表,索引称之为覆盖索引,不需要从数据表中获取

sql 复制代码
        select key2 from tablename where key1=111

以上就是我们今天分享的内容, 如有帮助,请不要吝啬咱们的赞哦 感谢大家

相关推荐
Elastic 中国社区官方博客33 分钟前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记37 分钟前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存
新知图书1 小时前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城5211 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
呼啦啦啦啦啦啦啦啦1 小时前
【Redis】事务
数据库·redis·缓存
HaoHao_0101 小时前
AWS Serverless Application Repository
服务器·数据库·云计算·aws·云服务器
C语言扫地僧1 小时前
MySQL 事务及MVCC机制详解
数据库·mysql
小镇cxy1 小时前
MySQL事物,MVCC机制
数据库·mysql
书生-w2 小时前
Redis Windows 解压版安装
数据库·windows·redis