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

mysql索引下推与回表

1.简介:

介绍:索引下推是mysql5.6版本的新特性

方法:就是把服务层查询工作下推到引擎层去处理

作用:它能减少回表查询次数,提高查询效率,减少io的开销

回表:使用非聚簇索引进行查找数据时,需要根据主键值去聚簇索引中再查找一遍完整的用户记录,这个过程叫做回表.

聚簇索引和非聚簇索引的区别:聚簇索引可以直接找到数据,非聚簇索引先找到聚簇索引,在通过聚簇索引找数据

2.MySQL架构图

 以前是在Service层的工作交给了引擎层

3.举例

 sql语句:

创建索引:create index idx_name_age on user(name,age);

查询语句:select * from user where name like ‘张’ and age=10;

  1)没有使用索引下推 

解释:存储引擎读取索引记录  ,根据索引中的主键值,并读取完整的行记录。存储引擎把记录交给Service层去检测该记录是否满足where条件

这样我们就会发现我们的第二次回表查询张飞的这条记录是多余的

问:没有使用索引下推为什么age会在server层 ,不是建立了(name,age)索引了吗?

答:最左匹配原则name是like并且百分号在右边,因此当前的联合索引实际上只有name会生效,如果想要对age进行过滤就需要回表将行数据从聚集索引中查出来,放到service层再对其进行过滤

2)使用索引下推 

解释判断条件部分能否用索引的列来检查,条件不满足就处理下一行记录。把原来在Service层的工作放到了引擎层中去,这样就减少了回表的次数,提高了效率

大家可以执行一下以下sql语句:

EXPLAIN SELECT * FROM USER WHERE NAME LIKE '张' AND age=10

 希望文章对你有帮助,有问题私信一起交流!

相关文章:

  • 安装Scala
  • [C#小技巧]如何捕捉上升沿和下降沿
  • 一行代码,将2D转3D图表!
  • C++编程 杨辉三角详解
  • JavaScript 中的异步编程(上)
  • 【一起学数据结构与算法】快速教你了解并实现单链表
  • 用Pytorch实现一个线性回归
  • 【C++】二叉搜索树set/map
  • 最短路径查找Dijkstra算法
  • [数字媒体] Photoshop基础之图像校正、抠图(证件照)和融合
  • 【毕业设计】基于的单片机的移动硬盘设计与实现 - stm32 嵌入式 物联网
  • 使用Python的requests库发送SOAP请求,错误码415
  • Python爬虫技术系列-02HTML解析-lxml+BS4
  • 今日头条——机器学习算法岗1234面
  • 【笔记】快速理解傅里叶级数
  • 时间复杂度分析经典问题——最大子序列和
  • 【Leetcode】104. 二叉树的最大深度
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • angular2开源库收集
  • Angular4 模板式表单用法以及验证
  • FineReport中如何实现自动滚屏效果
  • javascript面向对象之创建对象
  • Java多线程(4):使用线程池执行定时任务
  • Java深入 - 深入理解Java集合
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • mysql 数据库四种事务隔离级别
  • PermissionScope Swift4 兼容问题
  • Phpstorm怎样批量删除空行?
  • Protobuf3语言指南
  • Terraform入门 - 1. 安装Terraform
  • 基于遗传算法的优化问题求解
  • 简单基于spring的redis配置(单机和集群模式)
  • 警报:线上事故之CountDownLatch的威力
  • 前端性能优化——回流与重绘
  • 译米田引理
  • C# - 为值类型重定义相等性
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #Linux(Source Insight安装及工程建立)
  • (09)Hive——CTE 公共表达式
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4)STL算法之比较
  • (8)STL算法之替换
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)fread与fwrite详解
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (强烈推荐)移动端音视频从零到上手(下)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • .gitignore文件---让git自动忽略指定文件
  • .NET CLR Hosting 简介
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别