索引使用规则1——最左前缀法则

这篇文章主要介绍索引的使用规则——最左前缀法则,关于索引的效率,可以查看上一篇文章索引的有效性

最左前缀法则:索引使用了复合索引,也就是联合索引,使用一个索引名称索引了好几个字段。在这类索引中需要遵守最左前缀法则最左前缀法则指的是查询从索引的最左列开始(必须包含最左列),并且不跳过索引的列。如果跳跃了某一列,索引失效(后面索引的字段都失效)。具体我们举个例子

目录

1、首先我们创建一张表

2、创建一个联合索引(复合索引)

3、查看索引

4、查看执行计划以及执行性能(explain)

4.1、从表里面查询name='码云' and phone='18800808888' and age='55'的信息

 4.2、从表里面查询 name='码云' and phone='18800808888'的信息

4.3、查询name=码云的信息

4.4、不使用最左列的name查询phone和age

4.5、跳跃phone查询name=码云age=55的信息

4.6、三个字段都存在,但是顺序不一样的时候


1、首先我们创建一张表

 create table tb_user(
		id int auto_increment primary key comment '主键ID',
		name varchar(10) comment '姓名',
		profession varchar(10) comment '专业',
		age int comment '年龄',
		gender char(1) comment '1:男,2:女',
		phone char(11) comment '手机号',
		email char(11) comment '邮件'
)comment '用户基本信息表';
 
insert into tb_user(id,name,profession,age,gender,phone,email) values
		(null,'黄渤','教授',45,'1','18800801111','3333@qq.com'),
		(null,'冰冰','学生',35,'2','18800002222' ,'4444@qq.com'),
		(null,'码云','老板',55,'1','18800008888' ,'5555@qq.com'),
		(null,'李彦宏','总裁',50,'1','18800009999','6666@qq.com');
	

2、创建一个联合索引(复合索引)

将tb_user表里面的name,phone,age字段都索引上

create index index_user_search on tb_user(name,phone,age);

3、查看索引

show index from tb_user;

4、查看执行计划以及执行性能(explain)

4.1、从表里面查询name='码云' and phone='18800808888' and age='55'的信息

explain select * from tb_user where name='码云' and phone='18800808888' and age='55';

可以看到type=ref说明没有进行全表查询,走了索引,key_len=93

 4.2、从表里面查询 name='码云' and phone='18800808888'的信息

 explain select * from tb_user where name='码云' and phone='18800808888';

可以看到type=ref说明没有进行全表查询,走了索引。key_len=88,说明age的长度为5

4.3、查询name=码云的信息

 explain select * from tb_user where name='码云';

可以看到type=ref说明没有进行全表查询,走了索引,key_len=43,说明name的长度为43,phone的长度为45

4.4、不使用最左列的name查询phone和age

explain select * from tb_user where phone='18800808888' and age='55';

可以看到type=All说明进行全表查询,没有走索引。且key_len=NULL

4.5、跳跃phone查询name=码云age=55的信息

explain select * from tb_user where name='码云' and age='55';

 可以看到type=ref说明没有进行全表查询,走了索引。但是但是key_len=43,与4.3的key_len的长度一样。可见没有走后面的索引

4.6、三个字段都存在,但是顺序不一样的时候

 explain select * from tb_user where name='码云' and age='55' and phone ='18800808888';
 explain select * from tb_user where phone ='18800808888' and age='55' and name='码云';
 explain select * from tb_user where age='55' and phone ='18800808888' and name='码云';

可以看到type=ref说明没有进行全表查询,走了索引。key_len=93,说明只要最左列存在且没有出现跳跃的情况的时候,顺序无关紧要

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

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

相关文章

华为云是什么

公有云配置 区域: 同一个区域中的云主机是可以互相连通的,不通区域云主机是不能使用内部网络互相通信的 选择离自己比较近的区域,可以减少网络延时卡顿 华为云yum仓库:https://repo.huaweicloud.com/rockylinux/ 首先完成跳板机的…

文件拖放到窗体事件

参考代码 参考链接 拖放文件到窗体_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV13d4y1h7vr/?spm_id_from333.999.0.0&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e 特此记录 anlog 2024年2月27日

idea 创建打包 android App

1、使用 idea 创建 android 工程 2、 配置构建 sdk 3、配置 gradle a、进入 gradle 官网,选择 install (默认是最新版本) b、选择包管理安装,手动安装选择下面一个即可 c、安装 sdk 并通过 sdk 安装 gradle 安装 sdk&#xff1a…

【linux进程信号(一)】信号的概念以及产生信号的方式

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 进程信号 1. 前言2. 信号的基…

MySQL集群 双主架构(配置命令)

CSDN 成就一亿技术人&#xff01; 今天刚开学第一天给大家分享一期&#xff1a;MySQL集群双主的配置需求和命令 CSDN 成就一亿技术人&#xff01; 神秘泣男子主页&#xff1a;作者首页 <———— MySQL专栏 &#xff1a;MySQL数据库专栏<———— MySQL双主是一…

WEB服务器-Tomcat(黑马学习笔记)

简介 服务器概述 服务器硬件 ● 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求&#xff0c;并进行处理&#xff0c;因此一般来说服务器应具备承担服务并且保障…

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径

C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文: 1.C++笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 c…

【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现

1&#xff0c;视频地址 【wails】&#xff08;4&#xff09;&#xff1a;使用wails做桌面应用开发&#xff0c;整合chatgpt-web项目做前端&#xff0c;进行本地开发&#xff0c;web端也可以连调&#xff0c;使用websocket实现 2&#xff0c;演示效果 启动先是报500 错误&#…

最新 WebStorm 2023.3.4 激活

Stage 1 : 官网下载 Stage 2 : 下载工具 Stage 3-1 : windows为例 Stage 3-2 : mac为例 常见问题 Stage 1 : 官网下载 先去官网下载 Thank you for downloading WebStorm! 我这里下载的是最新版本的2023.3.4&#xff0c;测试过2023最新版本以及2022版本以上的版本没问题…

成为一名优秀的项目经理需要哪些技能?

成为一名优秀的项目管理专员需要具备以下技能和素质&#xff1a; 1. **沟通能力**&#xff1a;项目管理专员需要与团队成员、利益相关者、客户等进行有效沟通。这包括书面和口头沟通&#xff0c;确保信息的准确传达和理解。 2. **组织能力**&#xff1a;管理项目涉及许多任务和…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

[面试]我们常说的负载均衡是什么东西?

什么是负载均衡 如果用户量很多, 服务器的流量也随之增大, 此时出现两个问题, 软件性能下降 容易出现单点故障 为了解决这些问题, 引入了集群化架构, 也就是把一个软件同时部署在多个服务器上 集群化架构出现的问题 架构改变后又出现了两个问题 如何将请求均匀的发送到多…

Vue源码系列讲解——生命周期篇【七】(模板编译阶段)

目录 1. 前言 2. 模板编译阶段分析 2.1 两种$mount方法对比 2.2 完整版的vm.$mount方法分析 3. 总结 1. 前言 前几篇文章中我们介绍了生命周期的初始化阶段&#xff0c;我们知道&#xff0c;在初始化阶段各项工作做完之后调用了vm.$mount方法&#xff0c;该方法的调用标志…

一款.NET下 WPF UI框架介绍

WPF开源的UI框架有很多,如HandyControl、MahApps.Metro、Xceed Extended WPF Toolkit™、Modern UI for WPF (MUI)、Layui-WPF、MaterialDesignInXamlToolkit、等等,今天小编带大家认识一款比较常用的kaiyuanUI---WPF UI,这款ui框架美观现代化,用起来也超级方便, 界面展示…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题&#xff1f;比方说一个算法&#xff0c;它的 input 和 output 是什么&#xff1f;问题的条件是什么) 这篇文章提…

Nginx的核心配置指令及调优

目录 Nginx 核心配置指令 一、Nginx配置文件详解 1、配置文件目录 2、配置文件结构 二、调优 1、在全局域进行的调优 1.1线程池指令 1.2 工作进程数指令 1.3工作进程优先级指令 1.4 工作进程 CPU 绑定指令 1.5 调试可打开的文件个数 1.6 调试文件大小指令 1.7 只运…

【Docker】03 容器操作

文章目录 一、流转图二、基本操作2.1 查看本地容器进程2.2 启动容器2.2.1 交互式启动容器2.2.2 后台启动容器 2.3 进入容器2.4 停止启动重启容器2.5 退出容器2.6 删除容器2.7 提交容器&#xff08;打包成镜像&#xff09;2.8 拷贝文件2.8.1 拷贝容器内文件到宿主机2.8.2 拷贝宿…

2024.2.29 模拟实现 RabbitMQ —— 项目展示

目录 项目介绍 核心功能 核心技术 演示直接交换机 演示扇出交换机 演示主题交换机 项目介绍 此处我们模拟 RabbitMQ 实现了一个消息队列服务器 核心功能 提供了 虚拟主机、交换机、队列、绑定、消息 概念的管理九大核心 API 创建队列、销毁队列、创建交换机、销毁交换机、…

react useMemo 用法

1&#xff0c;useCallback 的功能完全可以由 useMemo 所取代&#xff0c;如果你想通过使用 useMemo 返回一个记忆函数也是完全可以的。 usecallback(fn,inputs)is equivalent to useMemo(()> fn, inputs). 区别是:useCallback不会执行第一个参数函数&#xff0c;而是将它返…
最新文章