首页 > 数据库 >MySQL进阶篇:第四章_四.一_ 索引使用_最左前缀法则

MySQL进阶篇:第四章_四.一_ 索引使用_最左前缀法则

时间:2023-10-10 11:44:06浏览次数:39  
标签:法则 前缀 索引 profession 进阶篇 user MySQL tb

索引使用_最左前缀法则

最左前缀法则

如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。

以 tb_user 表为例,我们先来查看一下之前 tb_user 表所创建的索引。

在 tb_user 表中,有一个联合索引,这个联合索引涉及到三个字段,顺序分别为profession,age,status。

对于最左前缀法则指的是,查询时,最左变的列,也就是profession必须存在,否则索引全部失效。而且中间不能跳过某一列,否则该列后面的字段索引将失效。 接下来,我们来演示几组案例,看一下具体的执行计划:

explain select * from tb_user where profession = '软件工程' and age = 31 and status
= '0';

explain select * from tb_user where profession = '软件工程' and age = 31;

explain select * from tb_user where profession = '软件工程';

以上的这三组测试中,我们发现只要联合索引最左边的字段 profession存在,索引就会生效,只不过索引的长度不同。 而且由以上三组测试,我们也可以推测出profession字段索引长度为47、age字段索引长度为2、status字段索引长度为5。

explain select * from tb_user where age = 31 and status = '0';

explain select * from tb_user where status = '0';

而通过上面的这两组测试,我们也可以看到索引并未生效,原因是因为不满足最左前缀法则,联合索引最左边的列profession不存在。

explain select * from tb_user where profession = '软件工程' and status = '0';

上述的SQL查询时,存在profession字段,最左边的列是存在的,索引满足最左前缀法则的基本条件。但是查询时,跳过了age这个列,所以后面的列索引是不会使用的,也就是索引部分生效,所以索引的长度就是47。

标签:法则,前缀,索引,profession,进阶篇,user,MySQL,tb
From: https://www.cnblogs.com/oten/p/17754290.html

相关文章

  • 《MySQL与MariaDB学习指南》高清高质量 原版电子书PDF+源码
    下载:https://pan.quark.cn/s/2392eb287424......
  • mysql 创建表分区 list分区
    CREATETABLE`goods`(`id`varchar(36)NOTNULL,`goods_name`varchar(256)NOTNULLCOMMENT'产品名称',`release_version`varchar(8)NOTNULL,PRIMARYKEY(`release_version`,`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4ROW_FORMAT=DYNAMIC;al......
  • Windows安装MySQL
    一、下载安装包1、下载地址:https://downloads.mysql.com/archives/community/二、解压并创建配置文件,创建数据目录1、步骤#1将下载的压缩包解压#2在bin目录同级下创建一个文件,命名为my.ini#3在bin目录同级下创建一个文件夹,命名为data三、编辑配置文件my.in......
  • clickhouse连接访问mysql
    创建MySQL表创建数据库test和表t1,并向t1表中插入几条数据CREATEdatabasetest;usetest;CREATEtablet1(idint,namevarchar(100));INSERTINTOt1values(1,'a'),(2,'b'),(3,'c');SELECT*FROMt1;ClickHouse连接访问MySQL方式1:数据库引擎MySQL用......
  • Conveyor (CF E) (dp 差分/前缀 条件迷惑t)
     思路: 找各种性质1每一秒只有史莱姆进入起始点,然后他会选一个方向走(右或者下),每一秒史莱姆都会这样走在考虑前t秒内有S个史莱姆到达这个点,然后就会有s+1/2个往右走,s/2往下走而且问t秒只会有t-n-m-1秒后的时刻影响(诈骗t)于是利用dp+差......
  • Typecho博客网站迁移:MySQL ➡️ MarialDB
    目录1.引言2.Typecho的自定义配置迁移3.数据库迁移:MySQL->MarialDB3.1在原服务器中备份并导出数据库文件3.2将“backupdb.sql”文件拷贝至新服务器并导入数据4.Nginx配置5.Handsome主题操作1.引言由于服务、价格等因素更换云服务器是很常见的情况,本文记录了Typecho博......
  • MySQL数据库被锁表你有遇到过吗?
    1.被锁原因1、锁表发生在insertupdate、delete中;2、锁表的原理是数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite或者回滚或者退出数据库用户;3、锁表的原因:3.1、A程序执行了对tableA的insert,并还未commite时,B程序也对tableA进行insert......
  • openGauss学习笔记-94 openGauss 数据库管理-访问外部数据库-mysql_fdw
    openGauss学习笔记-94openGauss数据库管理-访问外部数据库-mysql_fdwopenGauss的fdw实现的功能是各个openGauss数据库及远程服务器(包括数据库、文件系统)之间的跨库操作。目前支持的远程服务器类型包括Oracle、MySQL(MariaDB)、openGauss(postgres_fdw)、file_fdw、dblink。mysql_f......
  • 数据库MYSQL常用
    1命令操作数据库相关1.1连接和退出mysql服务#账号密码方式(我的本地因为暂时没有密码,所以不需要输入密码)mysql-hlocalhost-P3306-uroot-proot#退出\q1.2数据库操作1.2.1创建数据库createdatabasemydemo;1.2.2显示全部的数据库showdatabases;1.2......
  • 安装Mysql详细步骤
    一、下载安装包地址:https://downloads.mysql.com/archives/community/-根据需要选择安装版本二解压并创建配置文件,创建数据目录1将下载的压缩包解压2在bin目录同级下创建一个文件,命名为my.ini3在bin目录同级下创建一个文件夹,命名为data如图:三编辑配......