深圳人才热线招聘官网/武汉seo网站推广培训

深圳人才热线招聘官网,武汉seo网站推广培训,各种类型网站建设售后完善,福州做网站建设公司概念 索引下推(Index Condition Pushdown,简称 ICP) 是 MySQL 5.6 版本中提供的一项索引优化功能,它允许存储引擎在索引遍历过程中,执行部分 WHERE字句的判断条件,直接过滤掉不满足条件的记录,…

概念

索引下推(Index Condition Pushdown,简称 ICP) 是 MySQL 5.6 版本中提供的一项索引优化功能,它允许存储引擎在索引遍历过程中,执行部分 WHERE字句的判断条件,直接过滤掉不满足条件的记录,从而减少回表次数,提高查询效率。

例子

假设我们有一个名为 user 的表,创建了联合索引(name, age)。

CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(20)  NOT NULL,`high` int NOT NULL,`age` int NOT NULL,PRIMARY KEY (`id`),KEY `idx_name_age` (`name`,`age`)
);
SELECT * FROM user WHERE name = '张三' AND age > 3;
  • 没有索引下推之前,即使 name字段利用索引可以帮助我们快速定位到 name = ‘张三’ 的用户,但我们仍然需要对每一个找到的用户进行回表操作,获取完整的用户数据,再去判断 age > 3。
  • 有了索引下推之后,存储引擎会在使用name字段索引查找name = ‘张三’ 的用户时,同时判断 age > 3。这样,只有同时满足条件的记录才会被返回,减少了回表次数。
SET optimizer_switch = 'index_condition_pushdown=off';
explain SELECT * FROM user WHERE name = '张三' AND age > 3;

在这里插入图片描述

SET optimizer_switch = 'index_condition_pushdown=on';
explain SELECT * FROM user WHERE name = 'k哥' AND age > 3;

在这里插入图片描述
在这里插入图片描述

原理

先看下面这张 MySQL 简要架构图。
在这里插入图片描述

  1. MySQL 可以简单分为 Server 层和存储引擎层这两层。Server 层处理查询解析、分析、优化、缓存以及与客户端的交互等操作,而存储引擎层负责数据的存储和读取,MySQL 支持 InnoDB、MyISAM、Memory 等多种存储引擎。
  2. 索引下推的下推其实就是指将部分上层(Server 层)负责的事情,交给了下层(存储引擎层)去处理。

我们这里结合索引下推原理再对上面提到的例子进行解释。

没有索引下推之前:

  • 存储引擎层先根据 name 索引字段找到所有 name = ‘k哥’ 的用户的主键 ID,然后二次回表查询,获取完整的用户数据;
  • 存储引擎层把所有 name = ‘k哥’ 的用户数据全部交给 Server 层,Server 层根据 age > 3 这一条件再进一步做筛选。

有了索引下推之后:

  • 存储引擎层先根据 name 索引字段找到所有 name = ‘k哥’ 的用户,然后直接判断age > 3,筛选出符合条件的主键 ID;
  • 二次回表查询,根据符合条件的主键 ID 去获取完整的用户数据;
  • 存储引擎层把符合条件的用户数据全部交给 Server 层。
    可以看出,除了可以减少回表次数之外,索引下推还可以减少存储引擎层和 Server 层的数据传输量。

总结

索引下推应用范围

  1. 适用于 InnoDB 引擎和 MyISAM 引擎的查询。
  2. 适用于执行计划是 range, ref, eq_ref, ref_or_null 的范围查询。
  3. 对于 InnoDB 表,仅用于非聚簇索引。
    • 索引下推的目标是减少全行读取次数,从而减少 I/O 操作。
    • 对于 InnoDB 聚集索引,完整的记录已经读入 InnoDB 缓冲区。
    • 在这种情况下使用索引下推不会减少 I/O。
  4. 子查询不能使用索引下推,因为子查询通常会创建临时表来处理结果,而这些临时表是没有索引的。
  5. 存储过程不能使用索引下推,因为存储引擎无法调用存储函数。

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

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

相关文章

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…

2025信创即时通讯排行:安全合规与生态适配双轮驱动

随着信息技术应用创新(信创)战略的深化,国产即时通讯工具在政企市场的渗透率显著提升。2025年作为“十四五”规划收官之年,信创产业迎来规模化应用关键节点。本文将从认证标准、市场表现、技术架构、行业适配四大维度,…

关于TVS管漏电流的问题?

问题描述: 在量产的带电池故事机生产中,工厂产线测试电流时,有1台机器电流比正常机器大10mA左右。 原因分析: 1、分析电路原理图,去除可能出现问题的电压或器件(不影响系统),发现…

RAG 架构地基工程-Retrieval 模块的系统设计分享

目录 一、知识注入的关键前奏——RAG 系统中的检索综述 (一)模块定位:连接语言模型与知识世界的桥梁 (二)核心任务:四大关键问题的协调解法 (三)系统特征:性能、精度…

Java-servlet(七)详细讲解Servlet注解

Java-servlet(七)详细讲解Servlet注解 前言一、注解的基本概念二、Override 注解2.1 作用与优势2.2 示例代码 三、Target 注解3.1 定义与用途3.2 示例代码 四、WebServlet 注解4.1 作用4.2 示例代码 五、反射与注解5.1 反射的概念5.2 注解与反射的结合使…

机器学习——分类、回归、聚类、LASSO回归、Ridge回归(自用)

纠正自己的误区:机器学习是一个大范围,并不是一个小的方向,比如:线性回归预测、卷积神经网络和强化学都是机器学习算法在不同场景的应用。 机器学习最为关键的是要有数据,也就是数据集 名词解释:数据集中的…

本地AI大模型工具箱 Your local AI toolkit:LMStudio

LMStudio介绍 官网:LM Studio - Discover, download, and run local LLMs LMStudio 是一个面向机器学习和自然语言处理的,旨在使开发者更容易构建和部署AI语言模型的应用软件。 LMStudio的特点是: 完全本地离线运行AI大模型 可以从Huggi…

[OpenCV】相机标定之棋盘格角点检测与绘制

在OpenCV中,棋盘格角点检测与绘制是一个常见的任务,通常用于相机标定。 棋盘格自定义可参考: OpenCV: Create calibration pattern 目录 1. 棋盘格角点检测 findChessboardCorners()2. 棋盘格角点绘制 drawChessboardCorners()3. 代码示例C版本python版本…

redis的典型应用 --缓存

Redis最主要的用途,分为三个方面: 1.存储数据(内存数据库) 2.缓存(最常用) 3.消息队列 缓存 (cache) 是计算机中的⼀个经典的概念。核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅&…

本地基于Ollama部署的DeepSeek详细接口文档说明

前文,我们已经在本地基于Ollama部署好了DeepSeek大模型,并且已经告知过如何查看本地的API。为了避免网络安全问题,我们希望已经在本地调优的模型,能够嵌入到在本地的其他应用程序中,发挥本地DeepSeek的作用。因此需要知…

基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布

第〇部分 前言 一幅带有地理空间参考、且包含海陆分布的DEM图像在研究区的绘制中非常常见,本文将实现以下图像的绘制 关键步骤: (1)NOAA-NCEI官方下载最新的ETOPO-2022 DEM数据 (2)在ArcGIS(…

Retrofit中scalars转换html为字符串

简介 在Retrofit中,如果你想直接获取HTML或其他文本格式的响应内容而不是将其映射到一个模型类,ScalarsConverterFactory 就派上用场了。ScalarsConverterFactory 是一个转换器工厂,它能够将响应体转换为Java基本类型如String、Integer或Byte…

Powershell WSL Windows系统复制数据到ubuntu子系统系统

从本地D盘下拷贝数据到ubuntu子系统下 Powershell 管理员打开执行 /mnt/d 此处是本地Windows系统的路径表示/opt ubutu 子系统目录 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/从ubuntu子系统中拷贝数据到本地D盘下 Powershell 管理员打开执行…

【多线程】线程安全集合类,ConcurrentHashMap实现原理

文章目录 线程安全集合类解决方案多线程环境使用顺序表多线程环境使用队列多线程环境使用哈希表ConcurrentHashMap1. 缩小锁的粒度2. 充分使用 CAS3. 针对扩容操作 线程安全集合类 ArrayList、Queue、HsahMap… 都是线程不安全的 Vector、Stack、Hashtable 都是线程安全的&am…

spring-tx笔记

编程式事务与声明式事务的理解 补充:什么是事务? 事务是一个重要概念,尤其在数据库管理系统中。事务是指一组操作。,这些操作要么全部成功执行,要么全部不执行,确保数据的一致性和完整性 编程式事务 编…

Java-SpringBootWeb入门、Spring官方脚手架连接不上解决方法

一. Spring 官网:Spring | Home Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能(Spring全家桶) Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率 。 二. Spring Boot入…

1.7 无穷小的比较

1.定义 2.性质 3.无穷小的比较 3.1等价无穷小的性质 3.2 常见等价无穷小

StarRocks 升级注意事项

前段时间升级了生产环境的 StarRocks,从 3.3.3 升级到了 3.3.9,期间还是踩了不少坑所以在这里记录下。 因为我们的集群使用的是存算分离的版本,也是使用官方提供的 operator 部署在 kubernetes 里的,所以没法按照官方的流程进入虚…

深入探究 JVM 堆的垃圾回收机制(一)— 判活

垃圾回收分为两步:1)判定对象是否存活。2)将“消亡”的对象进行内存回收。 1 判定对象存活 可达性分析算法:通过一系列“GC Roots”对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,…

国产开发板—米尔全志T113-i如何实现ARM+RISC-V+DSP协同计算?

近年来,随着半导体产业的快速发展和技术的不断迭代,物联网设备种类繁多(如智能家居、工业传感器),对算力、功耗、实时性要求差异大,单一架构无法满足所有需求。因此米尔推出MYD-YT113i开发板(基…