Mysql覆盖索引_mysql索引长度限制

Mysql覆盖索引_mysql索引长度限制如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。只扫描索引而无需回表的优点:    1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。    2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。    3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。
只扫描索引而无需回表的优点:
    1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。
    2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。
    3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用
    4.innodb的聚簇索引,覆盖索引对innodb表特别有用。(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询)

覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引。

当发起一个索引覆盖查询时,在explain的extra列可以看到using index的信息
Mysql覆盖索引_mysql索引长度限制

覆盖索引的坑:mysql查询优化器会在执行查询前判断是否有一个索引能进行覆盖,假设索引覆盖了where条件中的字段,但不是整个查询涉及的字段,mysql5.5和之前的版本也会回表获取数据行,尽管并不需要这一行且最终会被过滤掉。
Mysql覆盖索引_mysql索引长度限制

如上图则无法使用覆盖查询,原因:
    1.没有任何索引能够覆盖这个索引。因为查询从表中选择了所有的列,而没有任何索引覆盖了所有的列。

    2.mysql不能在索引中执行LIke操作。mysql能在索引中做最左前缀匹配的like比较,但是如果是通配符开头的like查询,存储引擎就无法做比较匹配。这种情况下mysql只能提取数据行的值而不是索引值来做比较

优化后SQL:添加索引(artist,title,prod_id),使用了延迟关联(延迟了对列的访问)
Mysql覆盖索引_mysql索引长度限制
说明:在查询的第一阶段可以使用覆盖索引,在from子句中的子查询找到匹配的prod_id,然后根据prod_id值在外层查询匹配获取需要的所有值。

5.5时API设计不允许mysql将过滤条件传到存储引擎层(是把数据从存储引擎拉到服务器层,在根据条件过滤),5.6之后由于ICP这个特性改善了查询执行方式

译者介绍:家华,从事mysqlDBA的工作,记录自己对mysql的一些总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179723.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Hadoop简介_hadoop百度百科

    Hadoop简介_hadoop百度百科Hadoop的架构在其核心,Hadoop主要有两个层次,即:加工/计算层(MapReduce)存储层(Hadoop分布式文件系统)除了上面提到的两个核心组件,Hadoop的框架还包括以下两个模块:Hadoop通用:这是Java库和其他Hadoop组件所需的实用工具HadoopYARN:这是作业调度和集群资源管理的框架HadoopStreaming是一个实用程…

    2022年10月17日
  • pmos开关电路原理_高频开关电源电路图

    pmos开关电路原理_高频开关电源电路图​概述负载开关电路日常应用比较广泛,主要用来控制后级负载的电源开关。此功能可以直接用IC也可以用分立器件搭建,分立器件主要用PMOS加三极管实现。本文主要讨论分立器件的实现的细节。电路分析如下图所示R5模拟后级负载,Q1为开关,当R3端口的激励源为高电平时,Q2饱和导通,MOS管Q1的VGS<VGSth导通,R5负载上电,关断时负载下电。电路中R3为三极管Q2的限流电阻,R4为偏置电阻,R1R2为Q1的栅极分压电阻,C1C2为输出滤波电容。提出问题…

  • idea2021.5.1激活码【注册码】

    idea2021.5.1激活码【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 网络流详解(流网图一般能够反映什么信息)

    network-flows,网络流,传说中的省选算法先推荐一个讲网络流思路的网站:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html目的首先,明确网络流是干什么的给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow)….

  • linux终端使用gcc为什么显示未找到命令_linux下编译c程序

    linux终端使用gcc为什么显示未找到命令_linux下编译c程序ai0909于2011-11-0114:21:05发表:{:2_97:}itank于2011-02-2715:26:44发表:你试试gcchello.c-ohellowusmliao于2010-11-2519:46:00发表:求答案vfdff于2010-11-1412:29:29发表:使用whichgcc查看,如果没有则添加环境变量troy268于2…

    2022年10月13日
  • 2018一战硕士考研风雨路「建议收藏」

    2018一战硕士考研风雨路「建议收藏」写以此文,记录我在考研过程中的收获。(注:文章将以日记体形式呈现,文章较长,请耐心阅读)2017.7.10:考研生涯第一天今天开始我在家考研生涯的第一天,怎么说呢,这个结果还是感到有些意外的,因为我本来是计划留校学习的,但学校今年很特殊,要封校,无奈我经过认真考虑后,还是决定回家复习。第一天本想着调整下时差,早上七点起的,结果还是老样子八点半醒来了,洗漱了一下,吃完老妈做的早饭,于…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号