首页 > 其他分享 >索引下推

索引下推

时间:2023-08-17 14:13:07浏览次数:30  
标签:name age 下推 回表 索引 数据

索引下推是索引下推是 MySQL 5.6 及以上版本上推出的,用于对查询进行优化。

索引下推是把本应该在 server 层进行筛选的条件,下推到存储引擎层来进行筛选判断,这样能有效减少回表。

举例说明:

首先使用联合索引(name,age),现在有这样一个查询语句:

select *  from t_user where name like 'L%' and age = 17;

这条语句从最左匹配原则上来说是不符合的,原因在于只有name用的索引,但是age并没有用到。

不用索引下推的执行过程:

第一步:利用索引找出name带'L'的数据行:LiLei、Lili、Lisa、Lucy 这四条索引数据
第二步:再根据这四条索引数据中的 id 值,逐一进行回表扫描,从聚簇索引中找到相应的行数据,将找到的行数据返回给 server 层。
第三步:在server层判断age = 17,进行筛选,最终只留下 Lucy 用户的数据信息。

使用索引下推的执行过程:

第一步:利用索引找出name带'L'的数据行:LiLei、Lili、Lisa、Lucy 这四条索引数据
第二步:根据 age = 17 这个条件,对四条索引数据进行判断筛选,最终只留下 Lucy 用户的数据信息。
(注意:这一步不是直接进行回表操作,而是根据 age = 17 这个条件,对四条索引数据进行判断筛选)
第三步:将符合条件的索引对应的 id 进行回表扫描,最终将找到的行数据返回给 server 层。

比较二者的第二步我们发现,索引下推的方式极大的减少了回表次数。

索引下推需要注意的情况:

下推的前提是索引中有 age 列信息,如果是其它条件,如 gender = 0,这个即使下推下来也没用

开启索引下推:

索引下推是 MySQL 5.6 及以上版本上推出的,用于对查询进行优化。默认情况下,索引下推处于启用状态。我们可以使用如下命令来开启或关闭。

set optimizer_switch='index_condition_pushdown=off';  -- 关闭索引下推
set optimizer_switch='index_condition_pushdown=on';  -- 开启索引下推

 

标签:name,age,下推,回表,索引,数据
From: https://www.cnblogs.com/nr-zhang/p/17637413.html

相关文章

  • 为什么 MySQL 选择 B+树做索引?
    提到MySQL索引,相信使用过的小伙伴并不陌生,日常工作中,我们经常会加索引来提升查询效率,那么,为什么一个慢查询加上索引查询速度就能提升一个档次?索引后面的实现机制到底是什么?今天就让我们一起来探讨这个话题。申明:本文说的磁盘是指普通的机械磁盘一、索引是什么比如阅读时,索引......
  • elasticsearch中的数据类型search_as_you_type及查看底层Lucene索引
    search_as_you_type字段类型用于自动补全,当用户输入搜索关键词的时候,还没输完就可以提示用户相关内容。as_you_type应该是说当你打字的时候。它会给索引里的这个类型的字段添加一些子字段_2gram_3gram和_index_prefix。_2gram的意思是,如果一个值是abcd,2gram就是abbccd,3gr......
  • numpy中的索引下标为None的各种情况
    REFhttps://zhuanlan.zhihu.com/p/486373530?utm_id=0 None实际上是增加了一个维度,它不是原维度的索引。以一维为例x=np.arange(3)#array([0,1,2])(注意,这个一维数组的shape是(3,),而不是(1,3),初学者很容易犯错。)如果想把x的shape变成(1,3),只需要把None放在第一个......
  • MySQL---索引优化与查询优化(子查询优化)
    索引优化与查询优化子查询优化示例:优化后排序优化注意:1、orderby且不使用limit且数据量比较大时,如果select内容和索引字段不匹配,将会进行回表,优化器将不会使用索引,索引失效;......
  • 逻辑删除与唯一索引冲突的问题
    逻辑删除字段原设计是0表示未删除1表示已删除下面举例说明存在的问题和解决方案一个班的学生学号必须保持唯一,因此建立了唯一索引。如果删除了李明的信息之后,再录入李明的数据库无法插入成功。为了支持逻辑删除,将学号字段和逻辑删除字段建立联合索引但是如果是第二次再......
  • MySQL8.0 JSON的对比、排序和索引
    (目录)JSON的对比和排序JSON值可以通过=,<,<=,>,>=,<>,!=,<=>操作符来进行对比JSON不支持BETWEEN,IN(),GREATEST(),LEAST(),可以通过将JSON转换为其他数据类型来使用这些操作符。JSON值的对比在两个级别上进行,先进行数据类型的对比,如果类型相同,再进行值的对比。类型可以......
  • m扩展索引OFDM(Spread-OFDM-IM)matlab仿真,信号检测对比ZF,MMSE,ML等方法
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要        基于索引调制的OFDM(OFDM-IM,OFDMwithIndexModulation)技术被提出,在频率选择性衰落信道上提升了系统的分集增益,特别是在较低频谱效率场景下能够有效降低系统的误比特率。......
  • 聚簇索引和非聚簇索引区别
    聚簇索引和非聚簇索引是数据库索引的两种主要类型,它们在物理存储和查找数据的方式上有所不同。下面是对两者的详细介绍:聚簇索引(ClusteredIndex)物理排序:聚簇索引决定了表中数据行的物理排序。因为数据行与索引的排序方式是相同的,所以一个表只能有一个聚簇......
  • 动态HTTP代理与搜索引擎优化(SEO)的关系
     作为一名专业的爬虫代理供应者,今天我要和大家聊一聊动态HTTP代理与搜索引擎优化(SEO)之间的关系。你可能会觉得这两个话题没有直接联系,但实际上它们是息息相关的。在这篇文章中,我将向大家解释为什么使用动态HTTP代理对于提升网站的SEO效果至关重要,并分享一些实用的技巧。 首先......
  • MySQL的空间索引
    空间索引是一种特殊的数据库索引,用于存储空间数据并加速空间查询。空间数据通常是指与地理位置或空间坐标有关的数据,如经度和纬度、多边形边界、点等。空间索引的目的是快速查找在特定地理区域内或与特定地理形状相交的对象。以下是空间索引的一些核心概念和特点......