MySql索引下推(ICP)是什么?有什么用?

目录

  • 基本介绍
  • 为什么需要索引下推?
    • 未引入ICP(x)
    • 引入ICP(√)
  • 如何指导sql优化
    • 适用场景
    • sql优化

基本介绍

索引下推Index Condition Pushdown, ICP,是MySQL5.6 引入的优化技术,核心思想是:将查询条件中索引可过滤的部分从 Server 层 “下推” 到存储引擎层(如 InnoDB)提前处理,从而减少回表次数和磁盘 I/O

为什么需要索引下推?

未引入ICP(x)

(1)存储引擎先根据索引(需符合最左前缀等原则)查找数据,返回所有满足索引条件的记录;

(2)Server 层对所有返回的记录进行二次过滤,剔除不满足条件的记录(回表次数较多);

例如,表 users 有复合索引 idx(age, city)`,

-- a. 由于age是范围查询,因此复合索引只能利用到 age 部分。存储引擎innodb通过索引找到所有 age >   20 的记录,并返回给Server层。
-- b. 返回 Server 层后,再过滤 city = 'Shanghai' 和 name LIKE '%John%'
SELECT * FROM users 
WHERE age > 20 
AND city = 'Shanghai' 
AND name LIKE '%John%';

引入ICP(√)

  1. 存储引擎在索引遍历时,直接使用索引中包含的字段,提前过滤掉不满足 WHERE 子句的部分条件。
  2. 仅将过滤后的记录返回给 Server 层,减少回表次数和传输的数据量。(充分利用索引减少后续回表次数)

例如,表 users 有复合索引 ``idx(age, city),

-- a. 由于age是范围查询,因此复合索引只能利用到 age 部分。但条件中存在索引列 age, city,存储引擎在索引中直接过滤 age > 20 AND city = 'Shanghai'的记录,仅返回符合索引条件的记录。
-- b. 返回 Server 层后,再由 Server 层过滤 name。
SELECT * FROM users 
WHERE age > 20 
AND city = 'Shanghai' 
AND name LIKE '%John%';

如何指导sql优化

适用场景

可以看出,索引下推适用的场景:

  • 查询需要回表(非覆盖索引,如上述例子)。
  • WHERE 子句包含索引列和非索引列的条件(非索引列后续需要回表,如上述例子 name)。
  • 索引是复合索引,且 WHERE 条件包含索引的前缀列和非前缀列(如上述 name 和 age)。

sql优化

Explain 分析sql语句时,发现extra_info中包含Using index condition ,表明使用到了索引下推优化查询。

在这里插入图片描述
总结:
(1) 设计索引时,优先将高频过滤条件加入联合索引;
(2) 编写sql时,充分利用联合索引条件,在存储引擎层过滤掉不符合条件的记录,减少回表次数;
(3) 结合 Explain 执行计划验证 ICP 是否生效,针对性优化索引和查询条件;

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

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

相关文章

用户可免费体验!国家超算互联网平台上线阿里开源推理模型接口服

近日,国家超算互联网平台上线阿里巴巴开源推理模型QwQ-32B API接口服务,现在用户可获得免费的100万Tokens。基于国产深算智能加速卡以及全国一体化算力网,平台支持海量用户便捷调用QwQ-32B、DeepSeek-R1等国产开源大模型的接口服务。 了解QwQ…

大数据学习(63)- Zookeeper详解

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦🤞 &#x1f…

【蓝桥杯python研究生组备赛】003 贪心

题目1 股票买卖 给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易&…

mmdet3d.models.utils的clip_sigmoid理解

Sigmoid 函数 标准的 sigmoid 函数定义为: 容易得出结论: 取值范围(0, 1) clip_sigmoid 是在标准的 sigmoid 函数基础上进行 裁剪(clip),即对 sigmoid 输出的结果加以限制,避免其超出特定范围。 import …

侯捷 C++ 课程学习笔记:进阶语法之lambda表达式(二)

侯捷 C 课程学习笔记:进阶语法之lambda表达式(二) 一、捕获范围界定 1. 局部变量与函数参数 ​非静态局部变量:Lambda 所在作用域内定义的局部变量(如函数内部的 int x)会被完整复制其当前值。捕获后外部变…

有必要使用 Oracle 向量数据库吗?

向量数据库最主要的特点是让传统的只能基于具体值/关键字的数据检索,进化到了可以直接基于语义的数据检索。这在AI时代至关重要! 回到标题问题:是否有必要使用 Oracle 向量数据库? 这实际还要取决于你的具体应用需求。 客观来讲…

论文解读 | AAAI'25 CoRA:基于大型语言模型权重的协作信息感知用于推荐

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 个人信息 作者:刘禹廷,东北大学博士生 内容简介 将协作信息融入大型语言模型(LLMs)是一种有前景的适应推荐任务的技…

es扩容节点以后写入数据量增加1倍

背景: es扩容一倍的数据节点以后 写入数据量增加1倍 业务反馈业务访问量没增加。 最后定位是监控数据: PUT _cluster/settings {"persistent": {"xpack.monitoring.collection.enabled" : "false"} }这个索引记录的是 节…

G-Star 公益行 | 温暖相约 3.30 上海「开源×AI 赋能公益」Meetup

你是否曾想过,在这个数字化浪潮席卷的时代,公益组织如何突破技术瓶颈?当 AI 成为热门话题,它能为公益事业带来怎样的温度?开源的力量,如何让每一份善意都拥有无限可能? G-Star 公益行&#xff…

MySQL数据库复杂的增删改查操作

在前面的文章中,我们主要学习了数据库的基础知识以及基本的增删改查的操作。接下去将以一个比较实际的公司数据库为例子,进行讲解一些较为复杂且现时需求的例子。 基础知识: 一文清晰梳理Mysql 数据库基础知识_字段变动如何梳理清楚-CSDN博…

kafka-docker版

Kafka-docker版 1 概述 1.1 定义 Kafka传统定义: Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQucue),主要应用于大数据实时处理领域。它是一个开源的分布式事件流平台( Event Streaming Platform),被数千家公司用于高性能数据…

Zabbix 7.2 + Grafana 中文全自动安装ISO镜像

简介 ​ 基于Zabbix 官方的Alma Linux 8 作为基础镜像。 镜像源都改为国内大学镜像站,自动联网安装ZabbixGrafana。 安装中文字体、Zabbix和Grafana也配置默认中文。 Zabbix 也指定中文字体,绘图无乱码。 配置时区为东八区,Zabbix配置We…

使用pip在Windows机器上安装Open Webui,配合Ollama调用本地大模型

之前的文章分享过在 linux 服务器上安装,并使用Open-webui 来实现从页面上访问本地大模型的访问。也写了文章分享了我在家里 Windows Server 台式机上安装 Ollama 部署本地大模型,并分别使用 Chatbox 和 CherryStudio 来访问本地的大模型。今天我来分享一…

【python运行Janus-Pro-1B文生图功能】

前言 体验了一把本地部署Janus-Pro-1B实现文生图功能。 1、开源项目下载 官方开源项目代码直接从Github上下载。 2、模型下载 模型官方下载需要魔法 Janus-Pro-1B模型文件:Janus-Pro-1B模型文件 百度网盘: https://pan.baidu.com/s/16t4H4z-QZe2UDAg4…

18 | 实现简洁架构的 Handler 层

提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入 云原生 AI 实战 星球,12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra);本节课最终…

宇树ROS1开源模型在ROS2中Gazebo中仿真

以GO1为例 1. CMakelists.txt更新语法 cmake_minimum_required(VERSION 3.8) project(go1_description) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find…

LearnOpenGL-笔记-其三

在之前的章节中我们学习了基本的窗口构建方法、着色器的定义与使用以及摄像机的构建,而从今天这个大章节开始我们要来学习光照有关的知识。 颜色 现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用(有限的)数…

cfi网络安全 网络安全hcip

目录 RIP (路由信息协议) 算法 开销 版本 开销值的计算方式 RIPV1和RIPV2的区别 RIP的数据包 Request(请求)包 Reponse(应答)包 RIP的特征 周期更新 RIP的计时器 1,周期更新计时器 2,失效计时器 3,垃圾回收计时器 RIP的核心思…

RabbitMQ从入门到实战-2

文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机(IDEA中)基于Bean声明队列和交换机基于注解声明(推) 消息转换器配置Json消息转换器 业务改造&#…

《苍穹外卖》SpringBoot后端开发项目核心知识点与常见问题整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功: 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具:Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…