三十八、【进阶】最左前缀法则

news2024/11/23 0:52:28

1、理解

        最左前缀法则,如果索引了多列(联合索引),要遵守最左前缀法则,最左前缀法则是致,查询从索引的最左列开始,并且不跳过索引中的列。

        如果跳过某一列,索引将部分失效(该索引后面的字段索引全部失效)。

2、最左前缀法则

(1)案例准备

将使用如下语句来诠释最左前缀法则:

(2)查询表中索引

(3)使用联

        在使用联合索引查询tb_user表时,可以看到可能用到的索引为“idx_user_pro_age_sta”,实际用到的索引也是它,索引的长度为54

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

(4) 缺少部分字段

        为了验证最左前缀法则,再次查询tb_user表,这次只查询两个字段,分别为“profession”和“age”字段,发现依旧使用索引查询,其索引长度为49,可以得到len(status)=54-49=5

(5)缺少部分字段

         再次查询tb_user表,这次只查询一个字段,为“profession”字段,发现依旧使用索引查询,其索引长度为47,可以得到len(age)=49-47=2

(6) 跳过联合索引的第一字段查询

        再次查询tb_user表,这次查询联合索引的第二个字段和第三个字段,可以看到查询类别是“ALL”,表示全表扫描,不走索引。

        这是为什么呢?

        这是因为在使用联合索引时,联合索引最左边的字段必须出现,按顺序依次出现,否则索引查询就会失效。

(7)跳过索引的第一、二字段查询

        再次查询tb_user表,使用字段为“status”字段,可以看到查询方式依旧为“全表扫描”,没有使用索引查询,因为其不符合最左前缀法则。

(8) 不使用联合索引的第二字段查询

        再次查询tb_user表,联合索引查询,使用第一个字段“profession”和第三个字段“status”进行查询,可以看到查询方式为“索引查询”,但注意到,其索引长度为47,在前面的查询中,我们知道字段“profession”的长度为47,可见字段“status”查询并未生效,这是因为查询过程中跳过了第二个字段“age”不符合最左前缀法则

(9) 更换顺序

        在上述案例中,我们比较详细的分析了最左前缀法则,但此时,我们有一个疑问,如果我在使用联合索引查询时,调换了索引的顺序,会不会导致查询失败?

        如上图所示,我们在使用联合索引时,调换了字段的位置,依旧可以使用联合索引查询,这是因为and表示并列关系,并无先后递进关系。

3、范围查询

(1)基本

        在联合索引中,如果出现范围查询(>,<),会导致范围查询右侧的列索引失效。

(2)范围查询导致右边索引失效

(3)解决方案:

        在业务允许的范围内,将<&>改为<=&>=;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

锐捷EG易网关 phpinfo.view.php 信息泄露

致未经身份验证获取敏感信息 访问漏洞url&#xff1a; /tool/view/phpinfo.view.php漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技术或方法而造成的任何…

代码签名证书如何申请

代码签名证书也称之为软件数字证书&#xff0c;也可以叫作微软信任证书&#xff0c;主要给软件进行身份确定及保护知识产权&#xff0c;也可以被操作系统给信&#xff0c;对于软件开发企业是一项最基本的产品之一。 代码签名证书分为OV和EV两种类型&#xff0c;虽然认证步骤大同…

爬取抖音用户的个人基本信息

今年夏季&#xff0c;大概七八月份&#xff0c;刀郎开通抖音账号&#xff0c;并在抖音上发布多首作品&#xff0c;一时之间其热度暴涨&#xff0c;其粉丝也是与日俱增。 有人为了蹭热度&#xff0c;直播刀郎粉丝的实时变化情况&#xff0c;直播热度最高的时候同时几千人在线观…

SpringBoot内置工具类之断言Assert的使用与部分解析

先例举一个service的demo中用来验证参数对象的封装方法&#xff0c;使用了Assert工具类后是不是比普通的 if(xxx) { throw new RuntimeException(msg) } 看上去要简洁多了&#xff1f; 断言Assert工具类简介 断言是一个判断逻辑&#xff0c;用来检查不该发生的情况&#xff…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远控介绍及界面编写

红队专题 招募六边形战士队员[1]远控介绍及界面编写1.远程控制软件演示及教程简要说明主程序可执行程序 服务端生成器主机上线服务端程序 和 服务文件管理CMD进程服务自启动主程序主对话框操作菜单列表框配置信息 多线程操作非模式对话框 2.环境&#xff1a;3.界面编程新建项目…

MD5加密后16位与32位的区别 [ 详细 ]

文章目录 前言MD5加密算法说明MD516位和32位有何区别关于MD5的一些常见问题1、使用MD5对密码加密有什么用&#xff1f;2、为什么通过md5.cn在线加解密站还能解出明文呢&#xff1f; 总结 前言 MD5是HASH函数的一种&#xff0c;HASH函数又称杂凑函数&#xff0c;是在信息安全领…

Spark新特性与核心概念

一、Sparkshuffle &#xff08;1&#xff09;Map和Reduce 在shuffle过程中&#xff0c;提供数据的称之为Map端&#xff08;Shuffle Write&#xff09;&#xff0c;接受数据的称之为Redeuce端&#xff08;Shuffle Read&#xff09;&#xff0c;在Spark的两个阶段中&#xff0c;总…

C语言_断言assert详解

一、assert定义 assert() 的用法像是一种"契约式编程"&#xff0c;在我的理解中&#xff0c;其表达的意思就是&#xff0c;程序在我的假设条件下&#xff0c;能够正常良好的运作&#xff0c;其实就相当于一个 if 语句&#xff1a; if(假设成立) {程序正常运行&…

PYTHON+CH341 3线SPI驱动UC1601 LCD实现汉字显示

前言 参考大佬用CH341驱动OLED,链接如下&#xff1a;GitHub - jimjiang2/ch341dll_wrap_typical_app: A ch341dll Wrap is for using in Python 32bits windows to access I2C SPI and MDIO (by GPIO), and Demo with display PC sreen on OLED by i2c or SPI . 本文主要实现了…

C++设计模式_17_Mediator 中介者

Mediator 中介者也是属于“接口隔离”模式。 文章目录 1. 动机 (Motivation)2. 模式定义3. 结构(Structure)4. 要点总结5. 其他参考 1. 动机 (Motivation) 在软件构建过程中&#xff0c;经常会出现多个对象互相关联交互的情况&#xff0c;对象之间常常会维持一种复杂的引用关系…

【python】pip的使用

切换默认源 pip config set global.index-url 源地址 查看切换源是否成功&#xff1a;pip config list 常用镜像源 清华大学&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple/豆瓣&#xff1a;https://pypi…

入学生活科研随笔

近而立之年&#xff0c;巅峰享受的时期有两段。一是高考后&#xff0c;收到入学通知书。早晨&#xff0c;八点多&#xff0c;我醒来在院子里看到&#xff0c;爸爸在门口和邮政快递员寒暄。那天应该是8月15号&#xff0c;清晨凉凉爽爽的&#xff0c;杨树遮住了大半个院子。第二段…

matlab中filter帮助文档中“对矩阵行进行滤波”的解释

1、创建向量 % 创建一个由随机输入数据组成的 215 矩阵。 rng("default") %固定随机数种子 x randi(5,2,6) 结果 x 5 1 4 2 5 1 5 5 1 3 5 5 2、定义有理传递函数的分子和分母系数。 b 1; a [1 -0.2]; 3、沿着…

MATLAB R2018b详细安装教程(附资源)

云盘链接&#xff1a; pan.baidu.com/s/1SsfNtlG96umfXdhaEOPT1g 提取码&#xff1a;1024 大小&#xff1a;11.77GB 安装环境&#xff1a;Win10/Win8/Win7 安装步骤&#xff1a; 1.鼠标右击【R2018b(64bit)】压缩包选择【解压到 R2018b(64bit)】 2.打开解压后的文件夹中的…

【开源】基于SpringBoot的天然气工程运维系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

【APUE】并发 — 信号

目录 一、异步与同步 二、信号的概念 三、signal 函数 3.1 函数原型 3.2 代码示例 四、信号的不可靠 五、可重入函数 反例1&#xff1a;函数内使用了静态数据 反例2&#xff1a;函数内使用了 malloc 或 free 反例3&#xff1a;函数内调用了标准 I/O 函数 六、标准…

基于鸡群算法的无人机航迹规划-附代码

基于鸡群算法的无人机航迹规划 文章目录 基于鸡群算法的无人机航迹规划1.鸡群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用鸡群算法来优化无人机航迹规划。 1.鸡群搜索算法 …

Docker Harbor概述及构建

Docker Harbor概述及构建 一、Docker Harbor 概述1.1、harbor 简介1.2、Harbor的优势1.3、Harbor 的核心组件1.4、Docker私有仓库 架构 二、Harbor构建Docker私有仓库2.1 环境配置2.2、部署Harbor服务2.2.1、上传dock-compose&#xff0c;并设置权限2.2.2、安装harbor-offline-…

C语言每日一题(21)删除排序数组中的重复项

力扣 26.删除排序数组中的重复项 题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考…

springboot打包后运行失败

运行jar包&#xff0c;报错如下&#xff1a; 环境描述 win11, springboot项目&#xff0c;jdk1.8&#xff0c;IDEA2022.1.3, spring-boot-maven-plugin版本2.2.6.RELEASE。 idea能正常运行&#xff0c;也能正常打成jar包。但运行jar包出错&#xff0c;报错信息如上。 问题来…