索引下推(ICP)是什么意思?如何理解?

目录

1. 索引下推概述

2. 索引下推举例

3. ICP 的主要作用


1. 索引下推概述

ICP 全称 Index Condition Pushdown,是MySQL5.6之后的一个新特性,它是一种在存储引擎层使用索引过滤数据的一种优化方式。

2. 索引下推举例

下面是数据库的一张 employees 员工表,表中有诸多字段

然后我给 department_id 部门id和 salary 薪水字段添加一个联合索引,departmend_id 排第一位,salary 排第二位

然后利用这个联合索引做一次条件查询。

(1)查询语句如下,

EXPLAIN 
SELECT * 
FROM employees 
WHERE department_id > 50 AND salary > 8000;

可以看到,查询条件中使用到了 department_id 和 salary,所以优化器会选择使用联合索引查询;

(2)首先第一个过滤条件 department_id > 50,可以通过索引快速查询,但是使用到了 ">" ,会导致联合索引后面的索引字段失效,即 salary 再进行判断的时候会进行全表扫描,不能走索引,联合索引只有 department_id 生效;

(3)假如说数据库查询到了 department_id 的数据一共有十条,那么正常来讲这十条数据会全部进行回表查询,查询到十条数据之后再判断第二个过滤条件 salary;

(4)但是数据库优化器会进一步采取索引下推,在这十条数据回表之前,先在引擎层对这十条数据后一个过滤条件 salary > 8000 做判断,这样一来就有可能会再次过滤一些不满足条件的记录,我们假设过滤之后剩下五条记录,那么就只需要进行5次回表查询,将回表查询次数减少,提高了数据库查询效率

使用 explain 执行计划输出查询详细信息

得出如下结果,可以发现再 Extra 额外信息行显示 Using index condition,Using where 

Using index condition 就表示用到了索引下推,索引下推通常应用于联合索引中;

3. ICP 的主要作用

对于InnoDB存储引擎来说,索引下推主要是减少回表查询的次数,降低数据库的IO消耗;因为回表查询是一种随机IO的行为,在回表之前减少回表次数就可以降低数据库的随机IO资源消耗;

ICP不仅可以应用于InnoDB存储引擎,也可以应用于MyISAM存储引擎;        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

色彩与心情:浴室的宁静氛围

创造宁静氛围 在浴室中,我们可以找到一片宁静的天地,让我们远离繁忙的日常生活,所以考虑一些舒缓并有助于提升幸福感的颜色。这包括从明亮和中等色调的绿色,到淡粉色和温馨的白色。 追求宁静与平静 浴室不再仅仅是日常卫生的地…

思维导图软件 Xmind mac中文版软件特点

XMind mac是一款思维导图软件,可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型:XMind提供了多种类型的导图,如鱼骨图、树形图、机构图等,可以满足不同用户的需求。 - 强大的功能和工具&#…

leetcode:876. 链表的中间结点

一、题目 函数原型: struct ListNode* middleNode(struct ListNode* head) 二、思路 要找到链表的中间结点,有两种思路: 暴力解法:先遍历一遍链表,计算出链表的长度,再次遍历链表,找到中间结点。…

【正点原子STM32连载】 第五十一章 汉字显示实验 摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html## 第五…

手把手教你数据流图如何画,轻松搞定!

数据流图是一种强大的工具,用于可视化和分析系统中的数据流动和处理过程。它不仅能够帮助我们更好地理解系统的功能和流程,还能够帮助我们发现和解决潜在的问题。在本篇文章中,我们将手把手教你掌握数据流图。 一、数据流图的概念和构成元素 …

稀疏数组如何帮助我们节省内存,提升性能

本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 什么是稀疏矩阵 稀疏矩阵是指矩阵中大部分元素为零的矩阵。在实际应用中,很多矩阵都是稀疏的&#xff0c…

线性回归预测波士顿房价 loss为NAN原因 画散点图找特征与标签的关系

波士顿房价csv文件 链接: https://pan.baidu.com/s/1uz6oKs7IeEzHdJkfrpiayg?pwdvufb 提取码: vufb代码 %matplotlib inline import random import torch import matplotlib.pyplot as plt import numpy as np import pandas as pd import torch从CSV中取出数据集 # 加载数…

SAP ABAP列表格式及表格输出

REPORT YTEST001. DATA wa LIKE spfli. WRITE: /. WRITE: 10航班承运人,40航班连接,60国家代码,80起飞城市,100起飞机场. SELECT * INTO wa FROM spfli.WRITE: / wa-carrid UNDER 航班承运人,wa-connid UNDER 航班连接,wa-countryfr UNDER 国家代码,wa-cityfrom UNDER 起飞城市…

保洁行业上门预约小程序源码系统 轻松预约 避免排队 源码开源可二开 带完整部署教程

生活节奏的逐步加快,人们对家庭保洁服务的需求日益增长。为了满足这一需求,我们为您打造了一款保洁行业上门预约小程序源码系统。这款系统让您轻松预约保洁服务,避免排队等待,同时源码开源可进行二次开发,还带有完整的…

详解Python中单引号双引号三引号的用法(适合小白)

单引号和双引号的使用 python 中单引号和双引号都是用来表示字符串,在一般情况下两者没有任何差别,在编码时统一规则即可 str1hello python! str2"hello python!" print(str1) print(str2) 有的时候我们需要在输出的字符串中输出双引号或者…

上课笔记(11.11之前笔记)

一.数据结构的分类 1.数据结构中分为四大类:线性表,哈希表,树,图。 2.线性表(line table):呈现线性结构的一种数据结构。具有顺序性,也就是所有数据都是有序的; 数组&…

【无标题】111

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

通讯协议学习之路(实践部分):UART开发实践

通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374) 本文…

Javascript享元模式

Javascript享元模式 1 什么是享元模式2 内部状态与外部状态3 享元模式的通用结构4 文件上传4.1 对象爆炸4.2 享元模式重构 5 没有内部状态的享元模式6 对象池7 通用对象池实现 1 什么是享元模式 享元(flyweight)模式是一种用于性能优化的模式&#xff0…

数据恢复工具推荐,高效恢复,这4款很实用!

很多电脑用户都会选择将文件直接保存在电脑上,但是在实际的操作过程中,数据丢失的情况难免会出现。而实用的数据恢复工具或许能有效帮助我们找回丢失的数据。电脑上有哪些使用效果比较好的数据恢复工具呢? 今天小编总结了几款好用的工具&…

leetcode:21. 合并两个有序链表

一、题目 函数原型: struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 二、思路 合并两个有序链表为一个新的升序链表,只需要遍历两个有序链表并比较结点值大小,依次将较小的结点尾插到新链表即可。 三、代码…

C#中.NET Framework 4.8控制台应用通过EF访问已建数据库

目录 一、创建.NET Framework 4.8控制台应用 二、建立数据库 1. 在SSMS中建立数据库Blogging 2.在VS上新建数据库连接 三、安装EF程序包 四、自动生成EF模型和上下文 1.Blog.cs类的模型 2.Post.cs类的模型 3.BloggingContext.cs数据库上下文 五、编写应用程序吧 我们…

Vatee万腾数字化引领未来,vatee创新思维

随着数字化时代的全面来临,Vatee万腾正以其独特的创新思维,为未来描绘出令人瞩目的数字化画卷。在这个充满变革和机遇的时代,Vatee万腾所展现的数字化引领力和创新思维,成为业界的翘楚。 Vatee万腾的创新思维贯穿于其数字化战略的…

数据结构 | 队列的实现

数据结构 | 队列的实现 文章目录 数据结构 | 队列的实现队列的概念及结构队列的实现队列的实现头文件,需要实现的接口 Queue.h初始化队列队尾入队列【重点】队头出队列【重点】获取队列头部元素获取队列队尾元素获取队列中有效元素个数检测队列是否为空销毁队列 Que…

更新:扶风解析计费系统V1.8.2源码/免授权优化版+附教程/修正完整版

源码简介: 最新的扶风解析计费系统V1.8.2源码,它是修正完整版,免授权优化版附带了教程。是更新优化版最新 V1.8 版本免授权版本。 之前分享过1.7.1版本的扶风计费系统,该版本已经存在相当长的时间,并且一直没有进行更…