ICP(Index Condition Pushdown)索引下推

什么是索引下推了?

MySQL的“索引下推”(Index Condition Pushdown,简称ICP)是MySQL 5.6引入的一个优化特性。这个特性允许MySQL在执行索引查询时,将某些条件判断下推到索引扫描阶段,从而减少需要检查的行数,提高查询效率。

传统的MySQL查询执行流程如下:

  1. 从索引中检索行。
  2. 将行从索引载入到内存。
  3. 在内存中对行应用WHERE子句中的条件。
  4. 返回满足条件的行。

5.6之后

如果WHERE子句中的某些条件可以基于索引值进行判断,那么这些条件就可以在从索引检索行时被评估,而不是等到行被加载到内存后再评估。这样可以减少需要检查的行数,提高查询效率。这个过程减少了需要从磁盘读取的数据量,因为只有满足条件的行才会被加载到内存中。这可以提高查询性能,特别是在大数据集上。

需要注意的是,不是所有的WHERE子句条件都可以被下推到索引扫描阶段。只有那些可以在索引扫描阶段被评估的条件才会被下推。

举个例子:

对于辅助的联合索引(name,age,position),正常情况按照最左前缀原则,SELECT * FROM employees WHERE name like 'LiLei%' AND age = 22 AND position ='manager' 这种情况只会走name字段索引,因为根据name字段过滤完,得到的索引行里的age和position是无序的,无法很好的利用索引。

在MySQL5.6之前的版本,这个查询只能在联合索引里匹配到名字是 'LiLei' 开头的索引,然后拿这些索引对应的主键逐个回表,到主键索引上找出相应的记录,再比对age和position这两个字段的值是否符合。

MySQL 5.6引入了索引下推优化,可以在索引遍历过程中,对索引中包含的所有字段先做判断,过滤掉不符合条件的记录之后再回表,可以有效的减少回表次数。使用了索引下推优化后,上面那个查询在联合索引里匹配到名字是 'LiLei' 开头的索引之后,同时还会在索引里过滤age和position这两个字段,拿着过滤完剩下的索引对应的主键id再回表查整行数据。

索引下推会减少回表次数,对于innodb引擎的表索引下推只能用于二级索引,innodb的主键索引(聚簇索引)树叶子节点上保存的是全行数据,所以这个时候索引下推并不会起到减少查询全行数据的效果。

为什么范围查找Mysql没有用索引下推优化?

在MySQL中,LIKE 查询和 BETWEEN 范围查询都可以利用索引下推(ICP)来提高查询性能。但是,是否使用索引下推取决于多种因素,包括查询的具体条件、索引类型、表统计信息和优化器的决策等。

  1. LIKE 查询:

    • 当使用 LIKE 查询时,如果模式匹配从模式开始 (%pattern),索引下推可能会非常有用。例如,对于 LIKE 'a%',MySQL可能会使用索引下推来快速定位以 'a' 开头的行。
    • 如果模式匹配从模式末尾开始 (pattern%),则索引下推可能不会起作用,因为MySQL需要扫描整个索引来查找匹配的行。
  2. BETWEEN 范围查询:

    • 对于 BETWEEN 范围查询,如果查询条件适用于索引的连续范围,并且有足够的索引选择性(即不同的索引值对应的行数差异较大),则MySQL可能会使用索引下推来加速查询。
    • 如果范围查询条件跨越了索引的多个不连续部分,或者范围查询条件的选择性不高,那么索引下推可能不会带来太大的性能提升。

总之,是否使用索引下推取决于多种因素,包括查询的具体条件、索引类型、表统计信息和优化器的决策等。为了获得最佳性能,建议定期分析和优化数据库查询,并确保索引被适当地使用和优化。

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

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

相关文章

数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)五

第五部分、数组和广义表详解 数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵…

代码随想录算法训练DAY27|回溯3

算法训练DAY27|回溯3 39. 组合总和 力扣题目链接 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 …

二、arcgis 点shp数据处理

在工作中,很多时候客户会提供点坐标,那么要想把点坐标生成shp文件,有两种方法(坐标系CGCS2000): 1.当只有个位数的点坐标时,可以直接在arcgisMap中添加,具体步骤如下: …

【人工智能大脑】仿生学与人工智能交汇:基于MP神经网络的精准农业实践

MP神经网络,即McCulloch-Pitts模型(MCP Model),是神经网络的早期形式之一,由Warren McCulloch和Walter Pitts在1943年提出。这个模型为现代人工神经网络的发展奠定了理论基础,并首次尝试模拟了生物神经元的…

最长子字符串的长度(二) - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出’l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。 输入描…

​《WebKit 技术内幕》学习之九(3): JavaScript引擎

3 JavaScriptCore引擎 3.1 原理 JavaScriptCore引擎是WebKit中的默认JavaScript引擎,也是苹果在开源WebKit项目之后,开源的另外一个重要的项目。同其他很多引擎一样,在刚开始的时候它的主要部分是一个基于抽象语法树的解释器,这…

react 实现页面状态缓存(keep-alive)

前言: 因为 react、vue都是单页面应用,路由跳转时,就会销毁上一个页面的组件。但是有些项目不想被销毁,想保存状态。 比如:h5项目跳转其他页面返回时,页面状态不丢失。设想一个 页面我滑倒了中间&#xf…

仓储管理系统——软件工程报告(需求分析)②

需求分析 一、系统概况 仓库管理系统是一种基于互联网对实际仓库的管理平台,旨在提供一个方便、快捷、安全的存取货物和查询商品信息平台。该系统通过在线用户登录查询,可以线上操作线下具体出/入库操作、查询仓库商品信息、提高仓库运作效率&#xff…

shell脚本概述

将命令写到脚本里面,利用路径或者解释器去执行。简要来说脚本其实就是命令的集合。 例如:echo $? 自定义变量,查看上次命令执行是否正确 linux常用的shell 脚本的构成: 1.解释器 (脚本是用什么语言写的…

10个常用python自动化脚本

大家好,Python凭借其简单和通用性,能够为解决每天重复同样的工作提供最佳方案。本文将探索10个Python脚本,这些脚本可以帮助自动化完成任务,提高工作效率。无论是开发者、数据分析师还是仅仅想简化工作流程的普通用户,…

【数据结构】二叉树算法讲解(定义+算法原理+源码)

博主介绍:✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦! 🍅附上相关C语言版源码讲解🍅 &#x1f44…

Java - 深入四大限流算法:原理、实现与应用

文章目录 Pre概述简单计数器原理实现测试优缺点 滑动窗口算法原理实现测试优缺点 漏桶算法原理实现测试优缺点 令牌桶算法原理实现测试优缺点 小结 Pre 深入理解分布式技术 - 限流 并发编程-25 高并发处理手段之消息队列思路 应用拆分思路 应用限流思路 SpringBoot - 优雅…

画眉(京东科技设计稿转代码平台)介绍

前言 随着金融App业务的不断发展,为了满足不同场景下的用户体验及丰富的业务诉求,业务产品层面最直接体现就是大量新功能的上线及老业务的升级,随之也给研发带来了巨大的压力,所以研发效率的提升就是当前亟需解决的问题&#xff…

QGIS生成热力图

目录 1 QGIS介绍 2 实现效果 3 具体步骤 3.1 获取北京市地图(区县级) 3.1.1 方法一:直接找到北京市地图 3.1.2 方法二:若没有单独的北京市地图,从中国地图上提取 3.2 获取数据 3.3 导入数据 1 QGIS介绍…

1148. 秘密的牛奶运输 (次小生成树)

1148. 秘密的牛奶运输 - AcWing题库 农夫约翰要把他的牛奶运输到各个销售点。 运输过程中,可以先把牛奶运输到一些销售点,再由这些销售点分别运输到其他销售点。 运输的总距离越小,运输的成本也就越低。 低成本的运输是农夫约翰所希望的。…

知识笔记(九十六)———在vue中使用echarts

1、安装 npm install echarts --save 2、在vue中引入(全局引入) // 引入echarts import echarts from echarts Vue.prototype.$echarts echarts3、在vue中的使用 需要用到echart的地方先设置一个div的id、宽高 提示: 可以在一个页面中引…

数据结构之使用顺序表写出通讯录

前言 昨天我们踏入了数据结构的深山,并且和顺序表battle了一番,虽说最后赢了,但同时也留下了一个问题:如何从顺序表的增删查改加强到通讯录的的增删查改,别急,今天就带你一探究竟。 一.回顾与思考 我们昨…

geemap学习笔记053:纹理特征

前言 纹理特征通常描述了遥感影像中像素之间的空间关系和变化,对于地物分类、目标检测以及图像分割等遥感应用非常有价值。本节将会介绍Earth Engine中提供的一些纹理特征计算方法,包括熵和灰度共生矩阵。 1 导入库并显示数据 import ee import geema…

【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译

VS显示100条左右的错误,UE热编译也不能通过。原因可能是[名字.Build.cs]文件的错误,缺少一些内容,比如说如果要写UserWidget类,那么就要在 ]名字.Build.cs] 中加入如下内容: public class beibaoxitong : ModuleRules …

自己本机Video retalking制作数字人

首先需要注意的是,这个要求你的笔记本显存和内存都比较大。我的电脑内存是64G,显卡是8G,操作系统是Windows 11,勉强能够运行出来,但是效果不是很好。 效果如下,无法上传视频,只能通过图片展示出…