首页 > 其他分享 >什么是索引下推

什么是索引下推

时间:2023-06-14 11:35:28浏览次数:29  
标签:name 什么 下推 查询 索引 MySQL age

索引下推

  • 在不使用ICP(索引条件下推优化,MySQL5.6添加的,用于优化数据查询)的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件 。

  • 在使用ICP的情况下,如果存在某些被索引的列的判断条件时,MySQL服务器将这一部分判断条件传递给存储引擎,然后由存储引擎通过判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给MySQL服务器 。

索引下推优化技术关键的操作就是将与索引相关的条件由MySQL服务器向下传递至存储引擎,由此减少IO次数

示例

假如一张用户表(user),其中主要几个字段有:id、name、age、address。建立联合索引(name,age)

需求1:要求匹配姓名第一个为陈的所有用户

  SELECT * from user where  name like '陈%'

根据 "最佳左前缀" 的原则,这里使用了联合索引(name,age)进行了查询

需求2:要求匹配姓名第一个字为陈,年龄为20岁的用户

  SELECT * from user where  name like '陈%' and age=20

Mysql5.6之前的版本(即没有索引下推)

执行的过程如下图:

img

 

会忽略age这个字段,直接通过name进行查询,在(name,age)这课树上查找到了两个结果,id分别为2,1,然后拿着取到的id值一次次的回表查询,因此这个过程需要回表两次

 

Mysql5.6及之后版本(即使用索引下推)

5.6版本添加了索引下推这个优化,执行的过程如下图:

img

InnoDB并没有忽略age这个字段,而是在索引内部就判断了age是否等于20,对于不等于20的记录直接跳过,因此在(name,age)这棵索引树中只匹配到了一个记录,此时拿着这个id去主键索引树中回表查询全部数据,这个过程只需要回表一次

结论

索引下推其实就是充分利用了索引中的数据,尽量在查询出整行数据之前过滤掉无效的数据

索引下推在非主键索引上的优化,可以有效减少回表的次数,大大提升了查询的效率

标签:name,什么,下推,查询,索引,MySQL,age
From: https://www.cnblogs.com/yogayao/p/17479707.html

相关文章

  • mysql可视化工具有哪些?优点是什么?
    MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),由于其开放源代码和高度可定制化的优势,广受开发者欢迎。为了更加高效地管理MySQL数据库,我们通常需要使用MySQL可视化工具。下面列出了几款MySQL可视化工具及其优点:NavicatforMySQLNavicatforMySQL是一款流行的MySQL可......
  • mysql可视化工具有哪些?优点是什么?
    MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),由于其开放源代码和高度可定制化的优势,广受开发者欢迎。为了更加高效地管理MySQL数据库,我们通常需要使用MySQL可视化工具。下面列出了几款MySQL可视化工具及其优点:NavicatforMySQLNavicatforMySQL是一款流行的MySQ......
  • Vue-router跳转和location.href有什么区别
    vue-router使用pushStat进行路由更新,不刷新页面,静态跳转;使用diff算法,按需加载,减少dom操作,同一个页面跳转或者路由跳转异步加载this.$nextTick(()=>{获取url})使用location.href来跳转,简单方便,但是刷新了页面;不同页面间跳转可以直接获取当前路径......
  • 数据仓管概念、关系建模和维度建模、维度表和事实表、数据仓库建模、什么是拉链表?
    目录数据仓管概念数据仓管分为5层数仓为什么要分层数据集市和数据仓库的区别数仓命名规范范式理论第一范式第二范式第三范式关系建模和维度建模星型模型:雪花模型:星座模型:模型选择:维度表和事实表数据仓库建模ODSDWD什么是拉链表?数据仓管概念数据仓管分为5层ODS原始数据层存......
  • C++面试八股文:什么是RAII?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第13面:面试官:什么是RAII?二师兄:RAII是ResourceAcquisitionIsInitialization的缩写。翻译成中文是资源获取即初始化。面试官:RAII有什么特点和优势?二师兄:主要的特点是,在对象初始化时获取资源,在对象析构时释放资源。这种技术可以......
  • C++面试八股文:什么是RAII?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第13面:面试官:什么是RAII?二师兄:RAII是ResourceAcquisitionIsInitialization的缩写。翻译成中文是资源获取即初始化。面试官:RAII有什么特点和优势?二师兄:主要的特点是,在对象初始化时获取资源,在对象析构时释放资源。这种技术可以......
  • oracle高可用中的AD 和 region分别代表什么
    1、AD代表可用性域(AvailabilityDomain),是OracleCloudInfrastructure(OCI)中的一种概念,它是指一个物理的数据中心,在不同的AD中部署应用程序和数据库可以提高系统的可用性和容错性。2、Region指的是OCI中的地理位置,每个Region都是一个独立的数据中心区域,由多个AD组成。在不同的Regi......
  • 2023.6.13 05.数据库索引操作
    05.数据库索引操作1.索引概述2.索引分类3.索引环境4.索引创建5.索引测试6.索引管理 1.索引概述索引就好⽐⼀本书的⽬录,它会让你更快的找到内容,显然⽬录(索引)并不是越多越好,假如这本书1000⻚,有500⻚也是⽬录,它当然效率低,⽬录是要占纸张的,⽽索引是要占磁盘空间的。 ......
  • MariaDB/MySQL的null值条件和索引
    对于应用程序来说,像这样使用WHERE条件并不罕见:WHEREstatus='DELETED'ORstatusISNULL如果运行EXPLAIN,这样的条件通常只会导致type列显示为ref_or_null。然而,如果没有NULL检查,它将显示为ref。但是,这是否意味着执行过程中只会发生一个细小的变化,而查询仍然会非常快呢?答......
  • 什么是Sparse by default for crates.io
    当Rustcrate发布到crates.io上时,可以启用“Sparsebydefault”特性,这意味着默认情况下,crate不会包含所有依赖项在上传到crates.io的最终包中。相反,它只会包含必要的直接依赖项来使crate正常运行。这个特性对于减少crate的大小和用户需要下载和安装的依赖项数量非常......