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

MySQL中如何减少回表

在MySQL中,回表是指在使用非聚集索引进行查询时,如果需要获取的数据不在索引页中,就需要根据索引页中的指针返回到数据表中查找实际数据行的过程。这个过程会增加额外的磁盘I/O操作,降低查询性能,特别是在查询大量数据时,回表查询的开销会显著增加。为了减少回表,可以采取以下策略

1. 使用覆盖索引

覆盖索引是指索引中包含了查询所需的所有列,这样就不需要进行回表查询。例如,创建一个包含覆盖索引的表

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),age INT,INDEX idx_name_age (name, age)
) ENGINE=InnoDB;

在这个例子中,如果查询只需要name和age列的数据,MySQL可以直接从索引中获取,而不需要回表查询

2. 优化查询语句

优化查询语句,尽量减少回表查询的次数。例如,避免使用SELECT *,只选择需要的列。例如

3,使用索引下推

在MySQL 5.7引入了「索引下推」,可以在查询过程中直接使用索引进行过滤,减少回表次数。

SELECT * FROM user_info WHERE name like '张' and age < 18;

 在这个查询中,使用idx_name_age索引查询主键id,同时继续直接使用age对索引进行过滤,需要回表查询的小部分记录都会包含在最终结果里面

4. 查询条件使用聚集索引

聚集索引的B+树叶子结点存储表所有字段,查询索引可以直接获得所有字段信息,因此使用聚集索引查询可以避免二次回表

5. 反范式化设计

在性能和数据冗余之间找到平衡,通过增加冗余数据减少JOIN操作,提升查询速度

http://www.lryc.cn/news/494786.html

相关文章:

  • 初始Python篇(7)—— 正则表达式
  • 洛谷P1443 马的遍历
  • 代理IP地址的含义与设置指南‌
  • Vue--------导航守卫(全局,组件,路由独享)
  • ElasticSearch7.x入门教程之全文搜索(七)
  • Adversarial Learning forSemi-Supervised Semantic Segmentation
  • UCOS-II 自学笔记
  • C++ - 二叉搜索树讲解
  • 基于开源云原生数据仓库 ByConity 体验多种数据分析场景
  • RabbitMQ 消息确认机制
  • Node.js:开发和生产之间的区别
  • 【QT】背景,安装和介绍
  • 从0到1搭建webpack
  • 针对解决conda环境BUG的个人笔记
  • 读《Effective Java》笔记 - 条目13
  • SQL 之连接查询
  • vscode切换anaconda虚拟环境解释器不成功
  • 一个实用的 Maven localRepository 工具
  • 目标检测,图像分割,超分辨率重建
  • 微信小程序 城市点击后跳转 并首页显示被点击城市
  • Linux - nfs服务器
  • uniapp图片上传预览uni.chooseImage、uni.previewImage
  • C++ 字符串中数字识别
  • 学术中常见理论归纳总结-不定期更新
  • ModelSim怎么修改字体及大小
  • 图片预处理技术介绍4——降噪
  • Scrapy管道设置和数据保存
  • D84【python 接口自动化学习】- pytest基础用法
  • 如何正确书写sh文件/sh任务?bash任务
  • 多线程篇-5--线程分类(线程类型,springboot中常见线程类型,异步任务线程)