MySQL的索引条件下推(index condition pushdown,ICP)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 索引下推:不符合索引最左前缀原则,却还能利用复合索引的其他字段,减少回表次数。最左前缀可用于在索引中定位记录。那不符合最左前缀的部分,会怎样

索引下推:不符合索引最左前缀原则,却还能利用复合索引的其他字段,减少回表次数。


最左前缀可用于在索引中定位记录。那不符合最左前缀的部分,会怎样?


用户表联合索引(name, age)为例,现在需检索表中“名字第一个字是张,且年龄是10的所有男孩”:


select * from user where name like '张%' and age=10 and ismale=1;


在搜索索引树时,只能用 “张”,找到第一个满足条件记录ID3。总比全表扫好。然后判断其他条件。


MySQL5.6前,只能从ID3开始,一个个回表,到主键索引上找数据行,再对比字段值

5.6引入索引下推优化,在索引遍历过程中,对索引中包含的字段先做判断,直接过滤不满足条件的记录,减少回表次数

ICP是MySQL使用索引从表中检索行的场景优化:


若无ICP,存储引擎会遍历索引,以在基本表中找到行,并将其返回给MySQL Server来评估行的where条件

启用ICP,若能仅使用索引中的列来评估where条件的某些部分,MySQL Server会将此部分的where 条件下推向存储引擎。然后,存储引擎通过使用索引节点来评估推送的索引条件,并且仅当满足时,才是从表中读取的行。 ICP可减少存储引擎必须访问基本表的次数及MySQL Server必须访问存储引擎的次数


1 执行流程图


图里每个虚线箭头表示回表一次。


1.1 无索引下推

(name,age)索引里故意去掉age值,这过程InnoDB并不看age值,只按序把name第一个字是’张’的记录一条条取出来,并回表,共计回表4次。

6.png



1.2 索引下推


5.png

InnoDB在(name,age)索引内部就开始判断age是否等于10,对不等于10的记录,直接判断并跳过。这个例子中,只需对ID4、ID5这两条记录回表取数据判断,即只需回表2次。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
存储 关系型数据库 MySQL
Mysql索引总结(1)
Mysql索引总结(1)
10 0
|
3天前
|
SQL 关系型数据库 MySQL
MySQL8.0索引新特性
MySQL8.0索引新特性
|
3天前
|
存储 SQL 关系型数据库
MySQL 索引
MySQL 索引
11 0
|
15天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
【4月更文挑战第9天】InnoDB数据库使用B+树作为索引模型,其中主键索引的叶子节点存储完整行数据,非主键索引则存储主键值。主键查询只需搜索一棵树,而非主键查询需两次搜索,因此推荐使用主键查询以提高效率。在插入新值时,B+树需要维护有序性,可能导致数据页分裂影响性能。自增主键在插入时可避免数据挪动和页分裂,且占用存储空间小,通常更为理想。然而,如果场景仅需唯一索引,可直接设为主键以减少查询步骤。
16 1
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
|
17天前
|
关系型数据库 MySQL 数据库
6. 了解过Mysql的索引嘛 ?
了解MySQL的索引类型,包括单列索引(普通、唯一、主键和全文索引)和组合索引。单列索引用于一列,如普通索引允许重复值,唯一索引和主键索引不允许,后者不允许空值。全文索引适用于特定文本字段。组合索引是多列的,遵循左前缀原则,通常推荐用于提高查询效率,除非是主键。
17 0
|
5天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用
|
20天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
9天前
|
关系型数据库 MySQL 数据库
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
35 4
|
1月前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 中apt 安装MySQL数据库
Ubuntu 中apt 安装MySQL数据库
69 0
|
2天前
|
关系型数据库 MySQL 数据安全/隐私保护
安装mysql和远程连接
安装mysql和远程连接
17 0