什么是回表查询

简介: 这种查询就必须先在索引文件中找到name为小张的索引节点,很明显这个节点里面只有id,因为这张表只有主键索引,再根据id去数据文件查找具体数据

前置知识点

索引数据结构

mysql主要有两大索引:B-tree索引和hash索引,注意一个误区,这个不叫B减树,B树就是B树,B+树就是B+树,没有所谓的B减树,那个 - 是连接符号


索引实现

hash索引的底层就是一张哈希表,根据key的hash值查找值,因此无论有多少条数据,查找的时间复杂度都为O(1),但是如果有排序查询,时间复杂度会从O(1)退化到O(n);而树形结构永远都是O(log(n));


索引类型

mysql的所有分为聚集索引和非聚集索引


mysql引擎


MyISAM:

B+Tree叶节点存放的是数据记录的地址,在检索的时候,先找到索引对应的数据记录的地址,再根据地址读取相应的数据记录,这种查找方式被称为“非聚集索引”。

InnoDB:

它的主键索引是聚集索引,即主键和行记录放在同一个叶节点,找到了主键也就找到了行记录;而它的非主键索引,或者说是辅助索引,是非聚集索引,跟MyISAM引擎的非聚集索引不同的是,MyISAM叶节点保存的是地址,而InnoDB是主键,InnoDB非聚集索引的索引文件和数据文件分开存储,索引文件的叶节点只保存主键,在查找时,要先找到叶节点中的主键,再根据主键去主索引文件查找详细行记录;因此,在设计表的时候,主键字段不宜过长。


回表查询


上述InnoDB引擎中,非主键索引查找数据时需要先找到主键,再根据主键查找具体行数据,这种现象叫回表查询


如何避免

索引覆盖,即将查询sql中的字段添加到联合索引里面,只要保证查询语句里面的字段都在索引文件中,就无需进行回表查询;


比方说有个用户表,有id、name、age、addr四个字段,其中id为主键,主键自带主键索引,无需创建

值1:1、小张、18、成都;

值2:2、小黄、20、北京;

select * from table_t where name = "小张"

这种查询就必须先在索引文件中找到name为小张的索引节点,很明显这个节点里面只有id,因为这张表只有主键索引,再根据id去数据文件查找具体数据


如果把name、age、addr建立到联合索引,在找到name为小张的索引节点时,发现里面已经有了我们所需要的age、addr,就无需再到数据文件查找;


当然实际开发中,不可能把所有字段建立到联合索引,应根据实际业务场景,把经常需要查询的字段建立到联合索引即可。


相关文章
|
机器学习/深度学习 人工智能 自然语言处理
【AI 现况分析】AI 如何提高开发效率,在生产中的实践
【1月更文挑战第27天】【AI 现况分析】AI 如何提高开发效率,在生产中的实践
|
SQL 消息中间件 存储
PostgreSQL CDC的最佳实践
PostgreSQL CDC的最佳实践
PostgreSQL CDC的最佳实践
|
前端开发 JavaScript Java
计算机Java项目|基于Springboot的“衣依”服装销售平台的设计与实现
计算机Java项目|基于Springboot的“衣依”服装销售平台的设计与实现
223 0
|
12月前
|
人工智能 atlas 开发工具
【AI系统】昇腾 AI 架构介绍
昇腾计算产业基于华为昇腾系列处理器,涵盖硬件、基础软件、应用使能等,构建全栈AI计算基础设施。华为通过开放硬件、开源软件,支持多框架,推动AI技术在端、边、云的广泛应用,促进AI产业生态繁荣。
1040 1
|
搜索推荐 前端开发 JavaScript
html的head元素seo优化详解
在HTML的`<head>`元素中进行SEO优化对于提升网页在搜索引擎中的排名至关重要。以下是几个关键策略:确保每个页面有唯一的标题标签(50-60字符),使用描述标签(150-160字符)概括内容并包含关键词,设置正确的字符集(如UTF-8),使用视口元标签优化移动端显示,添加规范链接避免重复内容,利用结构化数据(如JSON-LD)帮助搜索引擎理解内容,优化样式和脚本加载,以及设置网站图标增强品牌识别。这些措施能显著提高网页的搜索引擎可见性和用户点击率。
|
SQL Oracle 关系型数据库
PLSQL 官方下载及安装
PLSQL 官方下载及安装
3388 0
PLSQL 官方下载及安装
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:支持向量机(SVM)
Python基础算法解析:支持向量机(SVM)
405 0
Python基础算法解析:支持向量机(SVM)
|
前端开发 容器
HTML <div> 和<span>
HTML <div> 和<span>
649 0
|
前端开发 Java Docker
Docker 部署项目,真的太雅了~
Docker 部署项目,真的太雅了~
427 0
|
NoSQL 数据可视化 MongoDB
mongoDB从入门到实战最全小白教程
mongoDB从入门到实战最全小白教程
794 0