MySQL索引下推讲解

news2024/11/20 4:49:31

文章目录

  • 一、什么是索引下推
  • 二、MySQL架构图
  • 三、DEMO演示过程

一、什么是索引下推

  • 索引条件下推(Index Condition Pushdown,ICP)是MySQL 5.6版本后引入的一项新特性。它通过减少回表的次数来提高数据库的查询效率。

  • 在不使用ICP的情况下,当使用非主键索引(也称为普通索引或二级索引)进行查询时,存储引擎会通过索引检索到数据,然后将数据返回给MySQL服务器,服务器再判断数据是否符合查询条件。

  • 而在使用ICP的情况下,如果查询语句中存在某些索引列的判断条件,MySQL服务器将这部分条件传递给存储引擎。存储引擎会根据这些条件判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时,存储引擎才会将数据检索出来并返回给MySQL服务器。

  • 通过使用ICP,数据库可以在存储引擎层级对索引进行条件判断,减少不必要的回表操作,从而提高查询效率。这样可以大大减少从磁盘读取数据的次数,加快查询速度。

  • 需要注意的是,ICP的效果取决于具体的查询语句和索引的使用情况。并不是所有的查询都适合使用ICP,有时可能会导致性能下降。因此,在使用ICP时需要进行合理的测试和评估,确保其能够带来性能的提升。

二、MySQL架构图

mysql

三、DEMO演示过程

MySQL版本如下:

SELECT VERSION();

在这里插入图片描述

下面是创建一个名为user的表,并插入一些测试数据的SQL语句:

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) NOT NULL COMMENT '用户名',
  `age` int(8) NOT NULL COMMENT '年龄',
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  `is_delete` tinyint NOT NULL DEFAULT 0 COMMENT '是否删除,默认否',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_name_age` (`name`, `age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO t_user(name, age, address) VALUES ('李四', 22, '中国');
INSERT INTO t_user(name, age, address) VALUES ('李五', 22, '中国');
INSERT INTO t_user(name, age, address) VALUES ('李六', 23, '中国');
INSERT INTO t_user(name, age, address) VALUES ('张三', 24, '中国');
INSERT INTO t_user(name, age, address) VALUES ('李期', 24, '中国');

在Navicat上执行上述SQL如下:

在这里插入图片描述
插入测试数据:

在这里插入图片描述

接下来,我们创建一个联合索引来测试索引下推的场景:

CREATE INDEX idx_user_name_age ON user (name, age);

然后,我们可以使用EXPLAIN语句来演示索引下推的效果:

EXPLAIN SELECT * FROM t_user WHERE name LIKE '李%' AND age = 22;

执行以上语句后,输出的结果中,可以观察到Extra列中有一个"Using index"的标记,表示索引下推被成功应用。

在这里插入图片描述

总结下SQL执行过程:

  1. 解析SQL语句,确定查询的表和条件。
  2. 根据查询条件选择合适的索引,如果存在适用的联合索引,会优先选择联合索引。
  3. 使用索引检索数据,将满足条件的索引行找出来。
  4. 将索引行传递给MySQL服务器。
  5. MySQL服务器根据剩余的条件进行判断,只有满足所有条件的索引行才会被返回。
  6. 返回结果给客户端。

在使用索引下推的场景下,步骤4中的索引行会根据剩余的条件进行判断,只有满足条件的索引行才会被返回给MySQL服务器,从而减少了不必要的数据传输和判断操作,提高了查询效率。

💎索引下推💎 是 mysql 5.6 优化查询回表的功能,在5.6之前都不支持索引下推,我这里使用的是8.0

关闭索引下推:

SET SESSION optimizer_switch='index_condition_pushdown=off';

再次执行:EXPLAIN SELECT * FROM t_user WHERE name LIKE ‘李%’ AND age = 22;

using where

  • 具体来说,Using where表示查询执行时需要在查询引擎层级使用WHERE子句对结果进行过滤。这意味着在查询执行期间,MySQL将扫描表中的每一行,并根据WHERE条件进行过滤,以返回满足条件的结果集。

  • 当Using where出现在EXPLAIN执行结果的Extra列时,表示查询过程中需要在查询引擎层级(Server层)执行额外的过滤操作,可能会导致查询性能下降。

  • 相比之下,如果EXPLAIN执行结果中出现了Using index condition,那么意味着查询过程中已经使用了索引下推(index condition pushdown),即查询条件已经在存储引擎层级进行了过滤,不需要在查询引擎层级再进行过滤操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/898003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Optional的基础运用

Optional的基础运用 简介代码示例 简介 代码示例 package org.example;import org.junit.Test;import java.util.Optional;public class OptionalTest {Testpublic void advance() {String str "hello";str null;// of(T t):封装数据t生成Optional对象&#xff0c…

贝叶斯推理问题、MCMC和变分推理

一、介绍 贝叶斯推理是统计学中的一个主要问题,在许多机器学习方法中也会遇到。例如,用于分类的高斯混合模型或用于主题建模的潜在狄利克雷分配都是在拟合数据时需要解决此类问题的图形模型。 同时,可以注意到,贝叶斯推理问题有时…

2018年9月全国计算机等级考试真题(C语言二级)

2018年9月全国计算机等级考试真题(C语言二级) 第1题 若有以下程序 main() { int a6, b0, c0; for(;a;) { ba; a-c; } printf("%d,%d,%d\n",a,b,c); } 则程序的输出结果是 A. 1,14,3 B. 0,18,3 C. …

【C语言】指针的进阶

目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名和数组名区别 3.数组指针的使用 四、数组参数与指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针…

【Matter】设备入网流程

官方信息 认证、配网过程 https://developers.home.google.com/matter/primer/commissioning Commissioning 是一个动作,待入网设备Commissionee 加入到Commissioner 过程 1.第一步,设备发现,比如通过ble 蓝牙方式 2.第二步,建…

科技资讯|苹果Vision Pro新专利曝光:可调节液态透镜

苹果公司近日申请了名为“带液态镜头的电子设备”,概述了未来可能的头显设计。头显设备中的透镜采用可调节的液态透镜,每个透镜可以具有填充有液体的透镜腔,透镜室可以具有形成光学透镜表面的刚性和 / 或柔性壁。 包括苹果自家的 Vision Pr…

嵌入式入门教学——C51(中)

嵌入式入门教学汇总: 嵌入式入门教学——C51(上)嵌入式入门教学——C51(中)嵌入式入门教学——C51(下) 目录 七、矩阵键盘 八、定时器和中断 九、串口通信 十、LED点阵屏 十一、DS1302实…

谷歌云 | 最大限度地提高可靠性降低成本:调整 Kubernetes 工作负载的大小

【Cloud Ace 是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训服务。】 您知道通过调整…

计蒜客T1266——出勤记录

水题&#xff0c;唯一考验操作水平的只有同级连续字符串最大值这一操作&#xff0c;解决方式如下&#xff1a; int late-1; //连续缺勤的次数 int max0;//最长连续的L //缺勤检验 for(int k0;k<temp.size()-1;k){if(temp[k]L&&late-1){late1;//当前是连续的第一个…

国产之光:讯飞星火最新大模型V2.0

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

Java实现CAS的原理

文章目录 1、 什么是CAS2、CAS的原理3、CAS的应用场景4、Java中的CAS实现5、使用AtomicInteger实现线程安全的计数器6、CAS实现原子操作的三大问题6.1、ABA问题6.2、循环时间长6.3、只能保证一个共享变量的原子性 7、总结 1、 什么是CAS CAS&#xff08;Compare and Swap&…

【GeoDa实用技巧100例】017:制作平行坐标图

文章目录 一、平行坐标图介绍二、平行坐标图制作1. 加载数据2. 平行坐标图三、平行坐标图链接一、平行坐标图介绍 在一般坐标系中,3D是可视化探索不同点相关性的极限。为了探索高维空间(大于3维)的可视化问题,1885年法国数学家奥克南提出了平行坐标的解决方案。 平行坐标图…

跑步用什么耳机听歌才不会掉,精选的几款跑步掉的运动耳机

跑步是一项受欢迎的运动&#xff0c;而好的音乐能够让跑步变得更加有趣。但是&#xff0c;很多人在跑步过程中都会遇到耳机脱落的问题&#xff0c;这不仅会打扰运动的节奏&#xff0c;也会让人感到非常恼火。因此&#xff0c;选择一款适合跑步的耳机非常重要。在本文中&#xf…

220、仿真-基于51单片机ULN2003A步进电机正反转加减速LCD12864显示Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 ​编辑 四、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方…

开发环境搭建

Anaconda安装搭建Python环境 官网下载Anaconda anaconda官网安装Anaconda设置系统环境变量 按照实际安装路径新建填写红框环境变量 验证环境是否正常运行 WINR输入cmd conda --version python --version pip --version 显示版本信息即为正常 VSCODE Python ShiftCtrlP顶部…

信号

信号也是IPC中的一种&#xff0c;是和管道&#xff0c;消息队列&#xff0c;共享内存并列的概念。 本文参考&#xff1a; Linux中的信号_linux中信号_wolf鬼刀的博客-CSDN博客 Linux系统编程&#xff08;信号处理 sigacation函数和sigqueue函数 )_花落已飘的博客-CSDN博客 Linu…

【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析

RocketMQ开源是使用文件作为持久化工具&#xff0c;阿里内部未开源的性能会更高&#xff0c;使用oceanBase作为持久化工具。 在RocketMQ1.x和2.x使用zookeeper管理集群&#xff0c;3.x开始使用nameserver代替zk&#xff0c;更轻量级&#xff0c;此外RocketMQ的客户端拥有两种的…

【快应用】图片放大预览功能的实现

【关键词】 放大、image、background-position 【问题背景】 快应用中并没有直接的放大图片预览的功能&#xff0c;然而是可以利用现有的功能去实现图片的放大预览功能的。这样在快应用中浏览页面内容遇到图片时&#xff0c;遇到一些小图&#xff0c;觉得图片内容是不错的&am…

基于Three.js的WebXR渲染入门

1、Three.js 渲染管线快速概览 我不会花太多时间讨论 Three.JS 渲染管道的工作原理,因为它在互联网上有详细记录(例如,此链接)。 我将在下图中列出基础知识,以便更容易理解各个部分的去向。 2、WebXR 设备 API 入门 在我们深入了解 WebXR API 本身之前,您应该知道 WebX…

Linux如何改变文件的权限

Linux如何改变文件的权限 权限介绍权限更改关键字chmod通过数字修改通过字母修改 权限介绍 文件类型和文件权限由10个字符组成 文件的类型&#xff1a;- 表示文件&#xff0c; d 表示文件夹文件权限&#xff1a;r 表示读权限&#xff0c;w 表示写权限&#xff0c;x 表示执行权…