iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL索引下推(ICP)的简单理解与示例
  • 444
分享到

MySQL索引下推(ICP)的简单理解与示例

2024-04-02 19:04:59 444人浏览 泡泡鱼
摘要

前言 索引下推(Index Condition Pushdown, 简称ICP)是Mysql 5.6 版本的新特性,它能减少回表查询次数,提升检索效率。 mysql体系结构 要明白

前言

索引下推(Index Condition Pushdown, 简称ICP)是Mysql 5.6 版本的新特性,它能减少回表查询次数,提升检索效率。

mysql体系结构

要明白索引下推,首先要了解Mysql的体系结构:

上图来自MySQL官方文档。

通常把MySQL从上至下分为以下几层:

  • MySQL服务层:包括NoSQL和SQL接口、查询解析器、优化器、缓存和Buffer等组件。
  • 存储引擎层:各种插件式的表格存储引擎,实现事务、索引等各种存储引擎相关的特性。
  • 文件系统层: 读写物理文件。

MySQL服务层负责SQL语法解析、触发器、视图、内置函数、binlog、生成执行计划等,并调用存储引擎层去执行数据的存储和检索。“索引下推”的“下”其实就是指将部分上层(服务层)负责的事情,交给了下层(存储引擎)去处理。

索引下推案例

假设用户表数据和结构如下:

id age birthday name
1 18 01-01 User1
2 19 03-01 User2
3 20 03-01 User3
4 21 03-01 User4
5 22 05-01 User5
6 18 06-01 User6
7 24 01-01 User7

创建一个联合索引(age, birthday),并查询出年龄>20,且生日为03-01的用户:


select * from user where age>20 and birthday="03-01"

由于age字段使用了范围查询,根据最左前缀原则,这种情况只能使用age字段进行范围查询,索引中的birthday字段无法使用。使用explain查看执行计划:


+------+-------------+-------+-------+---------------+--------------+---------+------+------+-----------------------+
| id   | select_type | table | type  | possible_keys | key          | key_len | ref  | rows | Extra                 |
+------+-------------+-------+-------+---------------+--------------+---------+------+------+-----------------------+
|    1 | SIMPLE      | user  | range | age_birthday  | age_birthday | 4       | NULL | 3    | Using index condition |
+------+-------------+-------+-------+---------------+--------------+---------+------+------+-----------------------+

可以看到虽然使用了age_birthday索引,但是索引长度key_len只有4,说明只有联合索引只有age字段生效了(因为age字段是int类型,占用4个字节)。最后Extra列的Using index condition表示这个查询使用了索引下推优化。

为在没有索引下推的情况下,执行步骤如下:

  • 存储引擎根据索引查找出age>20的用户id,分别是:4,5,7
  • 存储引擎到表格中取出id in (4,5,7)的3条记录,返回给服务层
  • 服务层过滤掉不符合birthday="03-01"条件的记录,最后返回查询结果为id=4的1行记录。

如果开启了索引下推优化,执行步骤如下:

  1. 存储引擎根据索引查找出age>20的用户id,并使用索引中的birthday字段过滤掉不符合birthday="03-01"条件的记录,最后得到id=4;
  2. 存储引擎到表格中取出id=4的1条记录,返回给服务层;
  3. 服务层过滤掉不符合birthday="03-01"条件的记录,最后返回查询结果为id=4的1行记录。

启用索引下推后,把where条件由MySQL服务层放到了存储引擎层去执行,带来的好处就是存储引擎根据id到表格中读取数据的次数变少了。在上面这个例子中,没有索引下推时需要多回表查询2次。并且回表查询很可能是离散IO,在某些情况下,对数据库性能会有较大提升。

总结

到此这篇关于MySQL索引下推(ICP)的简单理解与示例的文章就介绍到这了,更多相关MySQL索引下推(ICP)内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL索引下推(ICP)的简单理解与示例

本文链接: https://www.lsjlt.com/news/135221.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL索引下推(ICP)的简单理解与示例
    前言 索引下推(Index Condition Pushdown, 简称ICP)是MySQL 5.6 版本的新特性,它能减少回表查询次数,提升检索效率。 MySQL体系结构 要明白...
    99+
    2024-04-02
  • 如何理解MySQL索引下推
    本篇内容主要讲解“如何理解MySQL索引下推”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解MySQL索引下推”吧!- 思维导图 -回表操作对于数据库来说...
    99+
    2024-04-02
  • 如何进行MySQL索引条件下推的简单测试
    本篇文章给大家分享的是有关如何进行MySQL索引条件下推的简单测试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 自MySQL 5.6开始,...
    99+
    2024-04-02
  • MySQL 索引分类中单列索引的示例分析
    本篇文章为大家展示了MySQL 索引分类中单列索引的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一个已分区的表不支持全文本...
    99+
    2024-04-02
  • MySQL中单列索引和多列索引的示例分析
    这篇文章主要为大家展示了“MySQL中单列索引和多列索引的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中单列索引和多列索引的示例分析”这篇文...
    99+
    2024-04-02
  • mysql中索引与FROM_UNIXTIME的问题示例
    小编给大家分享一下mysql中索引与FROM_UNIXTIME的问题示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!零、背景简...
    99+
    2024-04-02
  • MySQL中索引与优化的示例分析
    这篇文章主要介绍MySQL中索引与优化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!索引与优化1、选择索引的数据类型MySQL支持很多数据类型,选择合适的数据类型存储数据对...
    99+
    2024-04-02
  • 关于对MongoDB索引的一些简单理解
    目录索引简介1.语法准备 2.数据准备: 3.索引 3.1 唯一索引 3.2 单键索引 3.3 多键索引 3.4 复合索引 3.5 交叉索引 3.6 部分索引 3.7覆盖索引 3.8...
    99+
    2024-04-02
  • Mysql索引实现原理的示例分析
    这篇文章主要为大家展示了“Mysql索引实现原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mysql索引实现原理的示例分析”这篇文章吧。MySQL...
    99+
    2024-04-02
  • 简单了解添加mysql索引的3条原则
    一,索引的重要性 索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达...
    99+
    2024-04-02
  • Mysql实现简易版搜索引擎的示例代码
    目录前言简介ngram 全文解析器创建全文索引检索方式1、自然语言检索(NATURAL LANGUAGE MODE)2、布尔检索(BOOLEAN MODE)与 Like 对比总结前言...
    99+
    2024-04-02
  • Mysql Innodb存储引擎之索引与算法的示例分析
    这篇文章将为大家详细讲解有关Mysql Innodb存储引擎之索引与算法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、概述索引太少,查询效率低;索引太多程序性能受到影响,索引的使用...
    99+
    2023-06-29
  • MySQL InnoDB 二级索引的排序示例详解
    排序问题 最近看了极客时间上 《MySQL实战45讲》,纠正了一直以来对 InnoDB 二级索引的一个理解不到位,正好把相关内容总结下。 PS:本文的所有测试基于 MySQL 8.0.13 。 先把问题抛...
    99+
    2024-04-02
  • JS实现简单的下雪特效示例详解
    目录前言主要实现代码HTML代码JS代码前言 很多南方的小伙伴可能没怎么见过或者从来没见过下雪,今天我给大家带来一个小Demo,模拟了下雪场景,首先让我们看一下运行效果 可以点击看看...
    99+
    2024-04-02
  • MySQL中的回表和索引覆盖示例详解
    目录索引类型索引结构非聚簇索引查询索引覆盖总结索引类型 聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引。使用聚簇索引查询会很快,因为可以直接定位到行记录 普通索引...
    99+
    2024-04-02
  • MySQL数据库索引及优化的示例详解
    目录一、mysql 索引简介二、索引优化实战三、总结在日常的数据库使用过程中,我们经常需要对数据进行查询、插入、删除等操作。为了提高这些操作的效率,数据库的性能优化显得尤为重要。本文将带你深入了解 MySQL 数据库的索...
    99+
    2023-05-19
    MySQL索引优化方式 MySQL索引 MySQL优化
  • Gin与Mysql实现简单Restful风格API实战示例详解
    目录Itworksmain.go编译运行数据库CURD增删改查增 查查询列表Query查询单条记录QueryRow改删组织代码封装模型方法Handler函数组织项目数据库处...
    99+
    2024-04-02
  • Spring与JDK线程池的简单使用示例详解
    1.配置自定义共享线程池(Spring线程池) @Configuration @EnableAsync public class ThreadPoolConfig{ //主要...
    99+
    2024-04-02
  • 深入解析MySQL索引的原理与优化策略
    目录索引的概念索引的原理索引的类型索引的使用索引的使用方式注意事项索引优化技巧索引的概念 mysql索引是一种用于加速数据库查询的数据结构,它类似于书籍的目录,能够快速指导我们找到需要的信息。MySQL索引可以根据一定的...
    99+
    2023-03-31
    解析MySQL索引原理和优化策略 MySQL索引原理 MySQL优化策略
  • RR与RC隔离级别下索引和锁的测试脚本示例代码
    基本概念 当前读与快照读 在MVCC中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。 快照读,读取的是记录的可见版本 (有可能是历史版本),不用加锁...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作