【Mysql】索引下推、索引合并详解
文章目录
- 1. 索引下推(Index Condition Pushdown, ICP)
- 定义
- 工作机制
- 实现过程
- 优化的典型场景
- 2. 索引合并(Index Merge)
- 定义
- 索引合并方式
- 使用限制
- 3. 对比与应用场景
- 选用建议
这篇文章就简单的给大家介绍下索引下推、索引合并
1. 索引下推(Index Condition Pushdown, ICP)
定义
索引下推是 MySQL 5.6 引入的一项优化,用于减少回表次数。它将部分查询条件的过滤工作推到存储引擎层,而不是在 MySQL 服务层处理,从而提升查询效率。
工作机制
在范围查询或复合索引场景下,MySQL 会利用索引列中的更多信息进行过滤,仅回表获取满足条件的数据。这减少了不必要的回表操作。
实现过程
-
未使用索引下推
-
查询语句:
SELECT * FROM user1 WHERE name LIKE 'A%' AND age = 40;
-
执行过程:
- 存储引擎通过索引
name
定位到匹配name LIKE 'A%'
的数据范围。 - 每条记录都回表获取完整行数据。
- 回表后,在服务层进一步过滤
age = 40
的条件。
- 存储引擎通过索引
-
-
使用索引下推
-
查询语句:
SELECT * FROM user1 WHERE name LIKE 'A%' AND age = 40;
-
执行过程:
- 存储引擎在二级索引中先判断
name LIKE 'A%'
和age = 40
的条件。 - 仅当二级索引满足所有条件时才回表获取完整行数据。
- 存储引擎在二级索引中先判断
-
优化效果:通过在存储引擎层过滤不符合条件的数据,回表次数大幅减少。
-
优化的典型场景
在范围查询中,通过复合索引的多个字段过滤条件,尤其是 SELECT *
查询。
2. 索引合并(Index Merge)
定义
索引合并是 MySQL 从 5.1 开始支持的一种优化技术,允许 SQL 查询同时使用多个单列索引,通过合并结果提高查询性能。
索引合并方式
-
交集(INTERSECT)
-
使用场景:查询条件是
AND
。 -
示例:
SELECT * FROM user WHERE name = '赵六' AND age = 22;
-
执行过程:
- 分别通过
idx_name
和idx_age
获取符合条件的主键 ID 列表。 - 对主键 ID 列表取交集。
- 根据交集中的 ID 回表查询。
- 分别通过
-
-
并集(UNION)
-
使用场景:查询条件是
OR
。 -
示例:
SELECT * FROM user WHERE name = '赵六' OR age = 22;
-
执行过程:
- 分别通过
idx_name
和idx_age
获取符合条件的主键 ID 列表。 - 对主键 ID 列表取并集,并去重。
- 根据去重后的 ID 回表查询。
- 分别通过
-
-
排序后取并集(SORT-UNION)
-
使用场景:当主键 ID 无序时(上面2种id是有序的)。
-
示例:
SELECT * FROM user WHERE name = '赵六' OR age > 22;
-
执行过程:
- 对主键 ID 进行排序。
- 然后取并集。
- 根据并集中的 ID 回表查询。
-
使用限制
- 索引顺序要求:取交集和并集都要求各索引列返回的主键 ID 是有序的。
- 优化范围有限:对于范围条件(如
age > 22
),如果无法返回有序的主键 ID,则可能无法直接使用索引合并。
3. 对比与应用场景
特性 | 索引下推 | 索引合并 |
---|---|---|
MySQL版本 | 5.6+ | 5.1+ |
优化目标 | 减少回表次数 | 组合使用多个索引 |
适用场景 | 复合索引、多条件过滤 | 单列索引、多条件组合查询 |
典型查询条件 | AND | AND 或 OR |
性能提升原理 | 存储引擎层提前过滤数据 | 合并多个索引结果 |
选用建议
- 索引下推:优先在复合索引设计中,充分利用索引列的过滤能力。
- 索引合并:适用于无法设计复合索引,但查询涉及多个单列索引的情况。
通过索引下推和索引合并的组合优化,可以显著提升查询性能,尤其是在大数据量的场景中表现尤为明显。
博客首页:总是学不会.
相关文章:
【Mysql】索引下推、索引合并详解
文章目录 1. 索引下推(Index Condition Pushdown, ICP)定义工作机制实现过程优化的典型场景 2. 索引合并(Index Merge)定义索引合并方式使用限制 3. 对比与应用场景选用建议 这篇文章就简单的给大家介绍下索引下推、索引合并 1. 索…...
简易记事本项目—基于SSM+Vue前后端分离
🌈🌈🌈今天给大家分享的是:基于SSMVue的简易记事本项目 目录 引言 技术栈介绍 项目概述 1. 用户注册 2. 用户登录 3. 用户退出 4. 事件分类 5. 事件管理 项目主要图片 引言 在快节奏的现代生活中,我们常常被…...
Java转C之C/C++ 的调试和内存分析
C/C 的调试和内存分析工具非常丰富,这些工具可以帮助开发者定位错误、分析程序行为,以及检测内存问题(如内存泄漏、非法访问等)。下面将详细介绍常见的调试器和内存分析工具,并进行分类讲解。 一、调试器 1. GDB (GNU…...
Python 面向对象编程全面解析与深度探索
目录 类和对象的概念 类(Class) 对象(Object) (一)属性(Attributes) (a).实例属性(Instance Attributes) (b).类属性(Class Att…...
零配置打包工具 Parcel 的详细使用指南
前言 在前端开发中,选择一个高效且易用的打包工具至关重要。Parcel 作为一款零配置的 Web 应用打包工具,凭借其卓越的性能和简单的使用体验,赢得了众多开发者的青睐。它不仅能够自动处理依赖关系和代码打包,还支持热模块替换和多…...
批量查找文件关键字-工具
string find...
freeswitch(开启支持MCU视频会议,使用mod_av模块)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install...
Quant connect的优势和不足,学习曲线难
Quant connect的优势和不足 Quant connect作为一个成熟的算法交易平台,具有许多优势,包括: 强大的回测功能:Quant connect提供了丰富的数据源和回测功能,可以对各种交易策略进行全面的回测和分析。 容易上手…...
对rust的全局变量使用drop方法
文章目录 rust处理全局变量的策略方法1:在main中自动Drop全局变量 参考 rust处理全局变量的策略 Rust 的静态变量不会在程序退出时自动调用 Drop,因为它们的生命周期与进程绑定。 use std::sync::OnceLock;struct GlobalData {content: String, }impl …...
使用FastGPT制做一个AI网站日志分析器
越来越的多网站面临每天上千次的扫描和各类攻击,及时发现攻击IP,并有效的屏蔽不良访问成为网站安全的重要保障,这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器,下面就开始: …...
无限次使用 cursor pro
github地址 cursor-vip 使用方式 在 MacOS/Linux 中,请打开终端; 在 Windows 中,请打开 Git Bash。 然后执行以下命令来安装: 部分电脑可能会误报毒,需要关闭杀毒软件/电脑管家/安全防护再进行 方式1:通过…...
vuex 作用及五大组成部分
Vuex 是 Vue.js 的官方状态管理库,旨在帮助开发者构建大型应用时更好地管理和共享全局状态。它提供了一种集中式存储和管理应用所有组件的状态的方式,并且遵循单一状态树的原则。通过 Vuex,可以更容易地实现状态的可预测性和调试。 一、Vuex…...
Centos7上Jenkins+Docker+Git+SpringBoot自动化部署
文章目录 1.宿主机安装maven2.安装jenkins3.配置Jenkins4.Jenkins脚本自动安装JDK(可选) 1.宿主机安装maven wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz mv apache-maven-3.9.9-bin.tar.gz /usr/local…...
MATLAB图卷积神经网络GCN处理分子数据集节点分类研究
全文链接:https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络(GCN)对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节,通过对分子数据集的操作实践,展示了完整的节点分类流程&#…...
高级Python游戏开发:创建一款多人对战坦克大战
在本教程中,我们将用Python的Pygame库开发一款高级的坦克大战游戏。这款游戏支持多人对战、碰撞检测、子弹射击以及地图障碍生成,适合作为学习Python高级游戏开发的练习项目。 一、游戏功能概述 多人对战模式:玩家可以操作坦克,在同一屏幕上互相攻击。子弹射击:坦克可以发…...
网站访问的基础-HTTP超文本传输协议
BS架构 浏览器Browser⬅➡服务器Server 浏览器和服务器之间通过 IP 地址进行通信,实现数据的请求和传输。 例如,当用户在浏览器中访问一个网站时,浏览器会根据用户输入的网址(通过 DNS 解析得到服务器 IP 地址)向服…...
使用Hydra库简化配置管理
使用Hydra库简化配置管理 简介 在现代软件开发中,配置管理是至关重要的。应用程序的灵活性和可维护性很大程度上取决于其如何处理配置。Hydra是一个由Facebook AI Research (FAIR) 开发的Python库,它旨在简化复杂应用的配置过程。Hydra使得开发者可以轻…...
Java对集合的操作方法
1. 数组转集合 //数组转集合 String[] split quickRechargeAmount.split(","); List<String> stringList Stream.of(split).collect(Collectors.toList()); 2. 对List集合数据内容进行分组 //对List集合数据内容进行分组 Map<String, List<LiveAppGi…...
WordPress酱茄主题 开源版 博客资讯自媒体网站模板
一款免费开源的WordPress主题,主题专为WordPress博客、资讯、自媒体网站而设计 运行环境 支持WordPress版本:5.6 兼容Chrome、Firefox、Safari等主流浏览器 支持设备:响应式布局,不同设备不同展示效果 服务器环境建议&#x…...
【SickOs1.1靶场渗透】
文章目录 一、基础信息 二、信息收集 三、反弹shell 四、提权 一、基础信息 Kali IP:192.168.20.146 靶机IP:192.168.20.150 二、信息收集 端口扫描 nmap -sS -sV -p- -A 192.168.20.150 开放了22、3128端口,8080端口显示关闭 22端…...
Javaweb web后端maven介绍作用安装
自动导入到这个项目 src是源代码 main主程序,核心代码 java是Java源代码 resources是项目配置文件 test测试相关的 maven概述 介绍 依赖在本地仓库查找,如果本地仓库有,用本地仓库的依赖,本地没有,连接中央仓库&…...
Input Action (输入动作) 在虚幻引擎中常用的值类型
1. Digital (bool) 含义: Digital 类型代表一个离散的、二元的输入状态,它只有两种可能的值:true(按下,激活)或 false(未按下,未激活)。 用途: 最常用于表示按键或按钮的按下状态。 适合于开关类型的操作,比如: 跳跃(按键按下时跳跃,松开时不跳跃) 奔跑/行走切换 …...
LabVIEW汽车综合参数测量
系统基于LabVIEW虚拟仪器技术,专为汽车带轮生产中的质量控制而设计,自动化测量和检测带轮的关键参数。系统采用PCIe-6320数据采集卡与精密传感器结合,能够对带轮的直径、厚度等多个参数进行高精度测量,并通过比较测量法判定产品合…...
快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3
快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3 1、确保已经安装了PostgreSQL数据库。2、添加PostGIS的EPEL仓库3、使用YUM安装PostGIS4、以下为其他安装方式,一个个去找源码的编译安装,过程较为繁琐(不熟路的不推荐) 要…...
MySQL八股文
MySQL 自己学习过程中的MySQL八股笔记。 主要来源于 小林coding 牛客MySQL面试八股文背诵版 以及b站和其他的网上资料。 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL&…...
Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi
(1)创建一个简单的FastApi 1. 导入必要的库 from fastapi import FastAPI import uvicornFastAPI 是一个用于构建现代、快速(高性能)的Web API的Python框架。uvicorn 是一个ASGI服务器,用于运行异步的Python Web应用…...
多模态机器学习综述论文|Multimodal Machine Learning: A Survey and Taxonomy
1. 引言 多模态机器学习是一个跨学科领域,它涉及到从多种感官模态(如视觉、听觉、触觉等)中提取信息,并构建能够处理和关联这些信息的模型。这种学习方式对于人工智能理解复杂世界至关重要。 名词解释: 模态Modality…...
CentOS8:英伟达显卡驱动与CUDA安装
挺偶然的,同事在CentOS8版本的GPU服务器上安装英伟达的显卡驱动和CUDA遇到了问题,于是协助进行了安装,顺便记录下此次安装过程与心得。 目录 显卡驱动安装 步骤简述 详细步骤 1、官网下载需要的驱动 2、驱动软件包上传并加权 3、安装…...
【IDEA】启动报错
今天启动IDEA报错 报错信息: Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打开任务管理器,关掉进程ID5444的任务...
Opencv之图像梯度处理和绘制图像轮廓
一、梯度处理的sobel算子函数 处理示意 Sobel 算子是一种常用的图像边缘检测方法,结合了一阶导数和高斯平滑,用于检测图像的梯度信息。 1、功能 Sobel 算子用于计算图像在 x 和 y 方向的梯度,主要功能包括: 强调图像中灰度值的…...
5.2章节python字符串的格式化三种方式
在Python中,格式化字符串是编程中常见的任务,它用于将变量或表达式的值嵌入到字符串中。以下是三种常见的格式化字符串的方式: 1.百分号(%)格式化: 这是Python早期版本中常用的字符串格式化方法。通过在字…...
.NET Core 各版本特点、差异及适用场景详解
随着 .NET Core 的不断发展,微软推出了一系列版本来满足不同场景下的开发需求。这些版本随着时间的推移逐渐演变为统一的 .NET 平台(从 .NET 5 开始)。本文将详细说明每个版本的特点、差异以及适用场景,帮助开发者更好地选择和使用…...
2024.12.14 TCP/IP 网络模型有哪几层?
2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级,我来复盘小林coding的计算机网络的知识点: TCP/IP 网络模型有哪几层? 问大家,为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有…...
基于SpringBoot的嗨玩旅游网站:一站式旅游信息服务平台的设计与实现
摘要 在旅游需求日益增长的今天,一个全面、便捷的旅游信息服务平台显得尤为重要。嗨玩旅游网站正是为了满足这一需求而设计的在线平台,它提供了包括景点信息、旅游线路、商品信息、社区信息和活动推广等在内的丰富旅游目的地信息,旨在帮助用…...
HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构
HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构 效果图DRAWTEXTREL示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont DRAWTEXTABS示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont 效果图 …...
VMware ESXi上创建Ubuntu虚拟机并实现远程SSH访问全攻略
文章目录 前言1. 在VMware ESXI中创建Ubuntu虚拟机2. Ubuntu开启SSH远程服务3. 安装Cpolar工具4. 使用SSH客户端远程访问Ubuntu5. 固定TCP公网地址 前言 本文主要介绍如何在VMware ESXi上创建一台Ubuntu 22.04虚拟机,并通过Cpolar内网穿透工具配置公网地址…...
进制的转换
前言 进制是一种进位计数制,是人为定义的带进位的计数方法。不同的进制使用不同数量的符号,以及不同的规则来组合这些符号以表示不同的数值。 一、进制类型 二进制:由一串0和1组成的数字,逢二进一 八进制:0 1 2 3 4 5 6 7,…...
迁移学习中模型训练加速(以mllm模型为例),提速15%以上
根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…...
CSS系列(6)-- 排版与文本详解
前端技术探索系列:CSS 排版与文本详解 📝 致读者:探索优雅的文字艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 排版与文本处理,学习如何创建既美观又易读的文本内容。 文本基础属性 🚀 字…...
嵌入式现状、机遇、挑战与展望
在当今数字化浪潮中,嵌入式系统宛如一颗璀璨的明珠,熠熠生辉,深刻地渗透到了我们生活的方方面面,成为推动现代科技进步不可或缺的关键力量。从智能家居的便捷控制,到工业生产的精准运作,再到汽车的智能驾驶…...
关于Postgresql旧版本安装
抛出问题 局点项目现场,要求对如下三类资产做安全加固,需要在公司侧搭建测试验证环境,故有此篇。 bclinux 8.2 tomcat-8.5.59 postgrel -11 随着PG迭代,老旧版本仅提供有限维护。如果想安装老版本可能就要费劲儿一些。现在&…...
【AI日记】24.12.14 kaggle 比赛 2-4 EDA
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Regression with an Insurance Dataset内容:构建自己的EDA(探索性数据分析)框架时间:5 小时感想:大规模数据集&a…...
《深入浅出HTTPS》读书笔记(18):公开密钥算法RSA(续)
【RSA算法安全性】 幂运算的逆过程就是求对数问题,而模运算可以认为是离散问题,组合起来RSA算法就是离散对数模型,只要密钥长度足够长,离散对数很难破解。 破解私钥有两个方法: ◎公钥持有人有e和n,而要计…...
LabVIEW面向对象编程有什么特点?
LabVIEW面向对象编程(OOP)的特点主要体现在它如何结合传统面向对象编程(OOP)的理念与LabVIEW的图形化编程模式,提供灵活的抽象和模块化的功能。以下是LabVIEW面向对象编程的几个主要特点: 1. 类&#x…...
【Hive数据仓库】Hive部署、Hive数据库操作(增删改查)、表操作(内部表、外部表、分区表、桶表)
目录 一、本地模式 1、安装MySQL 2、登录MySQL 3、修改密码 4、安装Hive 5、配置Hive系统环境变量 6、初始化Derby数据库 7、连接Hive用于测试 8、测试Hive 9、修改Hive配置文件 10、上传MySQL驱动包 11、初始化MySQL 12、连接Hive用于启动服务 二、远程模式 1、…...
bugku-simple MQTT-wp解析
1.下载题目打开题目,是一个流量包,题目说是MQTT,然后打开流量之后的流量都是MQTT,我们来搜一下MQTT是什么流量 MQTT流量: 是一种基于发布订阅模式的轻量级的通讯协议,并且该协议构建于TCP/IP协议之上&…...
【第四节】Git 分支管理
目录 前言 一、Git 分支简介 二、 分支的基本操作 2.1 创建分支 2.2 切换分支 2.3 列出分支 三、 分支的合并与删除 3.1 合并分支 3.2 删除分支 四、处理合并冲突 五、 总结 前言 Git 的分支管理是其核心功能之一,允许开发者在不影响主线开发的情况下进行…...
IDEA 修改格式化仅格式化本次改动代码
最近总是发现格式化的时候会格式化文件所有代码,提交Git 后再看提交日志,就很不清晰。修改方式如下 中文: 格式化代码快捷键[中文配置]: 英文: 格式化代码快捷键[英文配置]:...
UOB大华银行|校招网申综合能力SHL测评题库英语版本真题分析
大华银行有限公司(大华银行)是亚洲银行业的翘楚,大华银行总部位于新加坡,并在中国、印度尼西亚、马来西亚、泰国及越南设立了全资法人银行,在全球拥有约500 间分行及办事处,分布在亚太、欧洲与北美的19 个国…...
Redis应用—2.在列表数据里的应用
大纲 1.基于数据库 缓存双写的分享贴功能 2.查询分享贴列表缓存时的延迟构建 3.分页列表惰性缓存方案如何节约内存 4.用户分享贴列表数据按页缓存实现精准过期控制 5.用户分享贴列表的分页缓存的异步更新 6.数据库与缓存的分页数据一致性方案 7.热门用户分享贴列表的分…...