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

什么是索引下推?

    索引下推是MySQL5.6出现的优化手段,一般在联合索引中出现,对于失效的联合索引字段,在存储引擎层仍会进行条件筛选。如果没有索引下推,失效的联合索引字段并不会在存储引擎层筛选,而是返回到server层进行二次筛选。

  要理解索引下推,首先知道MySQL架构分层

 

 可以看到在索引层按照索引的匹配规则过滤了一次,在server层又按照非索引字段过滤了一次

 现有user表

create table `user`(
    id bigint primary key auto_increment,
    name varchar(16) not null ,
    age int not null ,
    address varchar(128),
    index(name, age)
);

insert into 
	user(name, age, address) 
values 
	( 'zs', 18, '苏州'),
	('zz', 19, '杭州'),
	('jack', 20,'深圳');

 要查询name以z开头,age=18岁的人,查询语句如下:

select * from user where name like 'z%' and age=18

在MySQL5.6之前 不走索引下推的情况

这里由于第一个字段name并不是等值匹配(不满足左匹配原则),因此age字段索引失效,无法走索引,在引擎层只能按照name进行过滤,然后通过回表查询出其他字段,age会在server层二次过滤,如图:

可以看到age字段是在server层过滤的,并且存储引擎层进行了两次回表 

MySQL5.6之后 走索引下推的情况

 

 

可以看到在引擎层将失效的索引age也进行了过滤(将本应是上层server层过滤的条件下推到了引擎层,因此叫索引条件下推),并且只进行了一次回表,返回的数据量也变少了

结论:

① 索引下推情况下将失效的索引也会在引擎层进行筛选

② 索引下推能减少回表次数,提高查询效率

③ 索引下推能减少传输的数据量,减少IO

相关文章:

  • 机器视觉开发教程——封装Halcon通用模板匹配工具【含免费教程源码】
  • java 查找两个集合的交集部分数据
  • K8s 1.27.1 实战系列(一)准备工作
  • 【零基础到精通Java合集】第二十九集:SQL常用优化手段
  • 双链路提升网络传输的可靠性扩展可用带宽
  • 【Oracle学习笔记】1.数据库组成对象
  • 前端开发10大框架深度解析
  • 前端基础之组件
  • CentOS 7 安装 Redis6.2.6
  • Docker的常用镜像
  • Linxu几种登陆方式介绍
  • 基于SSM+MySQL的二手书籍交易系统
  • 【零基础到精通Java合集】第二十集:Java内存模型-堆、栈、方法区
  • 【AI Guide】AI面试攻略只用看这一篇就够了!力争做全网最全的AI面试攻略——大模型(四十五)模型评估
  • 《数据治理破局:DataWorks中AI驱动流程的自修复之道》
  • Jadx Gui 的详细介绍、安装指南、使用方法及配置说明
  • 力扣 Hot 100 刷题记录 - 搜索二维矩阵 II
  • VisActor/VTable - 自定义图标
  • 【大模型技术】LlamaFactory 的原理解析与应用
  • 专门为高速连续扫描设计的TDI工业相机
  • 做网站反复修改/seo品牌
  • 建网站公司联系方式/seo顾问服务 乐云践新专家
  • 周口建设局网站/怎么从网上找国外客户
  • 漳州 外贸网站建设 SEO/百度关键词广告怎么收费
  • 助孕网站优化推广/电商的运营模式有几种
  • 某学校网站建设方案/网络推广是做什么工作