MySQL 中的索引下推功能

看到索引,应该大家都可以联想到这个是和查询效率有关系的,既然有这个功能,那么那句古话说的好啊:存在即合理。那么这个就是说有了这个功能,可以提升查询效率。

什么是索引下推

我们先有一个大概的理解:在 MySQL 中,索引下推(Index Condition Pushdown,简称 ICP)是一种优化技术,就是为了提高有索引表的查询性能

索引下推主要的目的是:在索引扫描过程中尽可能减少回表操作(所谓回表:是指索引中返回数据行到服务器层进行进一步过滤),从而提高查询效率。

原理

没有索引下推时

在没有索引下推的情况下,存储引擎通过索引检索到数据行后,会将数据行返回给服务器层,服务器层再根据 WHERE 条件中的其他条件(非索引条件)进行过滤判断。

有索引下推时

而有了索引下推,存储引擎在检索索引的过程中,就可以根据 WHERE 条件中的其他条件对索引中包含的数据进行判断过滤,只有符合条件的数据行才会被返回给服务器层。这样可以减少存储引擎返回给服务器层的数据行数,以及服务器层后续进行过滤判断的工作量。

这里我们看下存储引擎层和服务层的区别:
服务层和存储引擎层

看下这个图之后,应该大家都可以理解了,执行顺序是:
调用逻辑
总结一下哈:索引下推其实就是说,将过滤的行为传到了存储引擎层中,先在存储引擎层处理一遍,然后再返回给服务层。

为啥我感觉这个应该是理所当然的事情啊,好在这个功能现在已经是具备了。

使用场景示例

假设有一个表 users,这里我建了一个 age 和 city 的组合索引,其结构如下:

CREATE TABLE users (  id INT PRIMARY KEY,  name VARCHAR(100),  age INT,  city VARCHAR(100),  INDEX idx_age_city (age, city)  
);

如果执行以下查询:

SELECT * FROM users WHERE age BETWEEN 20 AND 30 AND city = 'New York';

在没有索引下推的情况下,MySQL 会扫描 idx_age_city 索引,找到所有 age 在 20 到 30 之间的记录,然后将这些记录返回给服务器层,服务器层再对这些记录进行 city = 'New York' 的过滤。

而在启用了索引下推的情况下,MySQL 会在存储引擎层就进行 city = 'New York' 的过滤,只有满足 age BETWEEN 20 AND 30city = 'New York' 的记录才会被返回给服务器层。

如何判断是否使用了索引下推

要确认查询是否使用了索引下推,可以使用 EXPLAIN 语句来查看查询的执行计划。在执行计划中,如果使用了索引下推,会在 Extra 列中看到 Using index condition

EXPLAIN SELECT * FROM users WHERE age BETWEEN 20 AND 30 AND city = 'New York';

如果执行计划中的 Extra 列显示 Using index condition,则说明该查询使用了索引下推优化。

索引下推带来的好处

  • 提高查询性能
    • 减少了存储引擎和服务器层之间的数据传输量,尤其是在表数据量很大、WHERE 条件比较复杂的情况下,性能提升效果更为明显。
    • 降低了服务器层的 CPU 开销,因为服务器层需要处理的数据行数减少了。
  • 优化复杂查询
    • 对于多表连接查询,如果连接列上有索引并且可以使用索引下推,也能提高连接查询的性能。

注意事项

索引下推是 MySQL 5.6 及以上版本引入的功能,因此在较低版本的 MySQL 中无法使用。

索引下推并不能替代所有情况下的回表操作,但对于某些查询模式,它可以显著减少回表操作的次数,从而提高查询性能。

索引下推与覆盖索引(covering index)不同,覆盖索引是指索引包含了查询所需的所有列,从而避免了回表操作。索引下推则是在索引扫描过程中进行部分条件的过滤,以减少回表操作的次数。

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

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

相关文章

CSP/信奥赛C++语法基础刷题训练(1):洛谷P5715 :三位数排序

CSP/信奥赛C语法基础刷题训练(1):洛谷P5715 :三位数排序 题目描述 给出三个整数 a , b , c ( 0 ≤ a , b , c ≤ 100 ) a,b,c(0\le a,b,c \le 100) a,b,c(0≤a,b,c≤100),要求把这三位整数从小到大排序。 输入格式 …

准确--FastDFS快速单节点部署

FastDFS单节点部署 1. 系统准备 # 查看操作系统信息(适用于麒麟V10) cat /etc/os-release# 安装必要的软件包 yum -y install gcc gcc-c perl zlib-devel unzip2. 准备 FastDFS 环境 cd /usr/local/fastdfs# 下载必要包(若有访问限制&…

国标GB28181视频平台EasyCVR私有化部署视频平台对接监控录像机NVR时,录像机“资源不足”是什么原因?

EasyCVR视频融合云平台,是TSINGSEE青犀视频“云边端”架构体系中的“云平台”系列之一,是一款针对大中型项目设计的跨区域、网络化、视频监控综合管理系统平台,通过接入视频监控设备及视频平台,实现视频数据的集中汇聚、融合管理、…

【智谱开放平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…

【C++】详细介绍模版进阶,细节满满

目录 一、非类型模版参数: 1、介绍: 2、使用: 3、注意: 4、应用 二、模版特化 (一)、概念 (二)、函数模版特化 1、步骤: 2、举例: 3、不建议使用函…

动态规划---解决多段图问题

ok 小伙伴们,我现在有点小小的红温,有点毛躁。 怎么解决多段图问题呢?求取最短路径有多种方法可取。 家人们,毫无思绪可言……………………………… 要实现动态规划,条件:子问题重叠度较高,并…

JMeter基础篇

目录 总目录: 一、JMeter简介: -用途: -优缺点: 二、JMeter安装: 三、项目简介: -学生管理系统: -API接口清单: 查询: 新增: 更新: 删…

Elasticsearch中什么是倒排索引?

倒排索引(Inverted Index)是一种索引数据结构,它在信息检索系统中被广泛使用,特别是在全文搜索引擎中。倒排索引允许系统快速检索包含给定单词的文档列表。它是文档内容(如文本)与其存储位置之间的映射&…

【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)

这是我的第374篇原创文章。 一、引言 SHAP有多种实现方式,每种方式都适用于特定的模型类型,可以实现更快的逼近。 TreeExplainer :TreeExplainer专为树集合方法开发,如XGBoost,LightGBM或CatBoost。 DeepExplainer :DeepExplain…

C++数据结构算法学习

C ,orient(面向) object , object entity(实体) Visible(可见的) or invisible(不可见) 变量用来保存数据 objects attribute(属性) services(服务) C STL 容器 vector, list() vector底层是数组,类似双向链表和list底层 map/s…

ELK-Logstash配置

文章目录 一、什么是Logstash、有什么用?什么是 Logstash?Logstash 的主要特点:Logstash 的用途: 二、Logstash的安装与基本配置事先要安装Java的环境?Logstash 安装Debian/UbuntuRed Hat/CentOSmacOS(使用…

R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP

R小盐准备介绍R语言机器学习与预测模型的学习笔记, 快来收藏关注【科研私家菜】 01 机器学习的可解释性 对于集成学习方法,效果虽好,但一直无法解决可解释性的问题。我们知道一个xgboost或lightgbm模型,是由N棵树组成,…

Vue自定义指令详解——以若依框架中封装指令为例分析

自定义指令 在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释: 一、自定义指令的基本概念 自定义指令允许开发者直接对DOM元素进行低层次操作,而无需编写大量的模板或者JavaScript代码。…

sql server启用远程连接与修改默认端口

一,数据库右键属性 二,sa账号状态属性启用 三,SQL Server配置管理器, 点击SQL Server 服务选项,确定SQL Server是正在运行的。 四,手动修改数据库的连接端口 1)确保启用 2)修改默认端口 3)客户端IP改为一…

吴恩达机器学习笔记(3)

吴恩达机器学习(3) tensorflow实现 用 TensorFlow 实现神经网络 以下是一个完整的代码示例,展示如何使用 TensorFlow 和 Keras 构建和训练一个简单的神经网络来处理 MNIST 数据集: import tensorflow as tf from tensorflow.k…

【入门篇】A+B Problem——多语言版

AB Problem 跳转 题目分析: 这个题目要求输入两个整数 a 和 b,然后输出它们的和。需要注意的是 a 和 b 的绝对值都不超过 10^9。此外,题目中提到了 Pascal 使用 integer 类型可能会爆掉,说明需要使用更大范围的数据类型来处理这…

Matlab实现鹈鹕优化算法(POA)求解路径规划问题

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鹈鹕优化算法(POA)是一种受自然界鹈鹕捕食行为启发的优化算法。该算法通过模拟鹈鹕群体在寻找食物时的协作行为,如群飞、潜水和捕鱼等,来探索问题的最优解。POA因其…

LED和QLED的区别

文章目录 1. 基础背光技术2. 量子点技术的引入3. 色彩表现4. 亮度和对比度5. 能效6. 寿命7. 价格总结 LED和 QLED都是基于液晶显示(LCD)技术的电视类型,但它们在显示技术、色彩表现和亮度方面有一些关键区别。以下是两者的详细区别&#xff…

《JavaEE进阶》----20.<基于Spring图书管理系统①(登录+添加图书)>

PS:关于接口定义 接口定义,通常由服务器提供方来定义。 1.路径:自己定义 2.参数:根据需求考虑,我们这个接口功能完成需要哪些信息。 3.返回结果:考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…