(六十)再来看看几个最常见和最基本的索引使用规则
今天我们来讲一下最常见和最基本的几个索引使用规则,也就是说,当我们建立好一个联合索引之后,我们的SQL语句要怎么写,才能让他的查询使用到我们建立好的索引呢?
下面就一起来看看,还是用之前的例子来说明。
上次我们讲的是等值匹配规则,就是你where语句中的几个字段名称和联合索引的字段完全一样,而且都是基于等号的等值匹配,那百分百会用上我们的索引,这个大家是没有问题的,即使你where语句里写的字段的顺序和联合索引里的字段顺序不一致,也没关系,MySQL会自动优化为按联合索引的字段顺序去找。
现在看第二个规则,就是最左侧列匹配,这个意思就是假设我们联合索引是KEY(class_name, student_name, subject_name),那么不一定必须要在where语句里根据三个字段来查,其实只要根据最左侧的部分字段来查,也是可以的。
比如你可以写select * from student_score where class_name=‘’ and student_name=‘’,就查某个学生所有科目的成绩,这都是没有问题的。
但是假设你写一个select * from student_score where subject_name=‘’,那就不行了,因为联合索引的B+树里,是必须先按class_name查,再按student_name查,不能跳过前面两个字段,直接按最后一个subject_name查的。
另外,假设你写一个select * from student_score where class_name=‘’ and subject_name=‘’,那么只有class_name的值可以在索引里搜索,剩下的subject_name是没法在索引里找的,道理同上。
所以在建立索引的过程中,你必须考虑好联合索引字段的顺序,以及你平时写SQL的时候要按哪几个字段来查。
第三个规则,是最左前缀匹配原则,即如果你要用like语法来查,比如select * from student_score where class_name like ‘1%’,查找所有1打头的班级的分数,那么也是可以用到索引的。
因为你的联合索引的B+树里,都是按照class_name排序的,所以你要是给出class_name的确定的最左前缀就是1,然后后面的给一个模糊匹配符号,那也是可以基于索引来查找的,这是没问题的。
但是你如果写class_name like ‘%班’,在左侧用一个模糊匹配符,那他就没法用索引了,因为不知道你最左前缀是什么,怎么去索引里找啊?
第四个规则,就是范围查找规则,这个意思就是说,我们可以用select * from student_score where class_name>‘1班’ and class_name<'5班’这样的语句来范围查找某几个班级的分数。
这个时候也是会用到索引的,因为我们的索引的最下层的数据页都是按顺序组成双向链表的,所以完全可以先找到’1班’对应的数据页,再找到’5班’对应的数据页,两个数据页中间的那些数据页,就全都是在你范围内的数据了!
但是如果你要是写select * from student_score where class_name>‘1班’ and class_name<‘5班’ and student_name>‘’,这里只有class_name是可以基于索引来找的,student_name的范围查询是没法用到索引的!
这也是一条规则,就是你的where语句里如果有范围查询,那只有对联合索引里最左侧的列进行范围查询才能用到索引!
第五个规则,就是等值匹配+范围匹配的规则,如果你要是用select * from student_score where class_name=‘1班’ and student_name>‘’ and subject_name<‘’,那么此时你首先可以用class_name在索引里精准定位到一波数据,接着这波数据里的student_name都是按照顺序排列的,所以student_name>'‘也会基于索引来查找,但是接下来的subject_name<’'是不能用索引的。
所以综上所述,一般我们如果写SQL语句,都是用联合索引的最左侧的多个字段来进行等值匹配+范围搜索,或者是基于最左侧的部分字段来进行最左前缀模糊匹配,或者基于最左侧字段来进行范围搜索,这就要写符合规则的SQL语句,才能用上我们建立好的联合索引!
相关文章:
(六十)再来看看几个最常见和最基本的索引使用规则
今天我们来讲一下最常见和最基本的几个索引使用规则,也就是说,当我们建立好一个联合索引之后,我们的SQL语句要怎么写,才能让他的查询使用到我们建立好的索引呢? 下面就一起来看看,还是用之前的例子来说明。…...
机器学习与目标检测作业(数组相加:形状需要满足哪些条件)
机器学习与目标检测(数组相加:形状需要满足哪些条件)机器学习与目标检测(数组相加:形状需要满足哪些条件)一、形状相同1.1、形状相同示例程序二、符合广播机制2.1、符合广播机制的描述2.2、符合广播机制的示例程序机器学习与目标检…...
CentOS救援模式(Rescue Mode)及紧急模式(Emergency Mode)
当CentOS操作系统崩溃,无法正常启动时,可以通过救援模式或者紧急模式进行系统登录。启动CentOS, 当出现下面界面时,按e进入编辑界面。在编辑界面里,加入参数:systemd.unitrescue.target ,然后Ctrl-X启动进入…...
从面试官角度告诉你高级性能测试工程师面试必问的十大问题
目录 1、介绍下最近做过的项目,背景、预期指标、系统架构、场景设计及遇到的性能问题,定位分析及优化; 2、项目处于什么阶段适合性能测试介入,原因是什么? 3、性能测试场景设计要考虑哪些因素? 4、对于一…...
通过知识库深度了解用户的心理
自助服务知识库的价值是毋庸置疑的,如果执行得当,可以帮助减少客户服务团队的工作量,仅仅编写内容和发布是不够的,需要知道知识库对客户来说是否有用,需要了解客户获得的反馈,如果你正确的使用知识库软件&a…...
HiveSQL一天一个小技巧:如何将分组内数据填充完整?
0 需求1 需求分析需求分析:需求中需要求出分组中按成绩排名取倒数第二的值作为新字段,且分组内没有倒数第二条的时候取当前值。如果本题只是求分组内排序后倒数第二,则很简单,使用row_number()函数即可求出,但是本题问…...
【亲测可用】BEV Fusion (MIT) 环境配置
CUDA环境 首先我们需要打上对应版本的显卡驱动: 接下来下载CUDA包和CUDNN包: wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run sudo sh cuda_11.6.2_510.47.03_linux.runwget htt…...
【调试方法】基于vs环境下的实用调试技巧
前言: 对万千程序猿来说,在这个世界上如果有比写程序更痛苦的事情,那一定是亲手找出自己编写的程序中的bug(漏洞)。作为新手在我们日常写代码中,经常会出现报错的情况(好的程序员只是比我们见过…...
单目标应用:蜣螂优化算法DBO优化RBF神经网络实现数据预测(提供MATLAB代码)
一、RBF神经网络 1988年,Broomhead和Lowc根据生物神经元具有局部响应这一特点,将RBF引入神经网络设计中,产生了RBF(Radical Basis Function)。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。 RBF的基本思想是…...
MTK平台开发入门到精通(Thermal篇)热管理介绍
文章目录 一、热管理组成二、Linux Thermal Framework2.1、thermal_zone 节点2.2、cooling_device 节点三、Thermal zones沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍MTK平台的热管理机制,热管理机制是为了防止模组在高温下工作导致硬件损坏而存在的…...
最好的 QML 教程,让你的代码飞起来!
想必大家都知道,亮哥一直深耕于 CSDN,坚持了好很多年,目前为止,原创已经 500 多篇了,一路走来相当不易。当然了,中间有段时间比较忙,没怎么更新。就拿 QML 来说,最早的一篇文章还是 …...
笔记(六)——stack容器的基础理论知识
stack是堆栈容器,元素遵循先进后出的顺序。头文件:#include<stack>一、stack容器的对象构造方法stack采用模板类实现默认构造例如stack<T> vecT;#include<iostream> #include<stack> using namespace std; int main(…...
Web前端学习:四 - 练习
三九–四一:百度页面制作 1、左右居中: text-align: center; 2、去掉li默认的状态 list-style: none; li中有的有点,有的有序,此代码去掉默认状态 3、伪类:hovar 一般显示为color: #0f0e0f, 当鼠标接触时…...
odoo15 标题栏自定义
odoo15 标题栏自定义 如何显示为自定义呢 效果如下: 代码分析: export class WebClient extends Component {setup() {this.menuService = useService("menu");this.actionService = useService("action");this.title = useService("title&…...
视觉SLAM十四讲 ch3 (三维空间刚体运动)笔记
本讲目标 ●理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。 ●学握Eigen库的矩阵、几何模块使用方法。 旋转矩阵、变换矩阵 向量外积 向量外积(又称叉积或向量积)是一种重要的向量运算,它表示两个向量所形成的平行…...
问题解决:java.net.SocketTimeoutException: Read timed out
简单了解Sockets Sockets:两个计算机应用程序之间逻辑链接的一个端点,是应用程序用来通过网络发送和接收数据的逻辑接口 是IP地址和端口号的组合每个Socket都被分配了一个用于标识服务的特定端口号基于连接的服务使用基于tcp的流Sockets Java为客户端…...
前端代码优化方法
1.封装的css样式,增加样式复用性。如果页面加载10个css文件,每个文件1k,那么也要比只加载一个100k的css文件慢 2.减少css嵌套,最好不要嵌套三层以上 3.不要在ID选择器前面进行嵌套,ID本来就是唯一的而且权限值大,嵌套完…...
【批处理脚本】-1.16-文件内字符串查找增强命令findstr
"><--点击返回「批处理BAT从入门到精通」总目录--> 共9页精讲(列举了所有findstr的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中…...
三天吃透Redis面试八股文
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…...
数据湖架构Hudi(三)Hudi核心概念
三、Apache Hudi核心概念 3.1 基本概念 Hudi 提供了Hudi 表的概念, 这些表支持CRUD操作, 可以利用现有的大数据集群比如HDFS做数据文件存储, 然后使用SparkSQL或Hive等分析引擎进行数据分析查询。 Hudi表的三个主要组件: 有序的…...
从零手写感知机到MindSpore实战:一份完整的鸢尾花分类作业避坑指南
从零手写感知机到MindSpore实战:一份完整的鸢尾花分类作业避坑指南 鸢尾花分类是机器学习入门的经典案例,但对于初学者来说,从理论推导到框架实战往往充满挑战。本文将带你完整走通这条学习路径:先手写感知机理解算法本质…...
基于反馈线性化与滑模鲁棒控制的综合策略:FLSMRC技术及其在Simulink中的应用
基于反馈线性化的滑模鲁棒控制/FLSMRC 线性化反馈需要精确的模型参数,而且无法克服外界扰动,所以需要引入具有鲁棒性特点的滑模控制,之后基于线性化反馈的滑模控制便可以用于参数不定及抵抗外界扰动。 在simulink中以模块图形式搭建的&#x…...
【3D设计】资源获取方法论:7个精准化策略助你高效获取专业级素材
【3D设计】资源获取方法论:7个精准化策略助你高效获取专业级素材 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 在3D内容创作领域,优质资源…...
当水力裂缝撞上天然裂缝:用COMSOL相场法重现‘海马尾巴’般的转向路径
当水力裂缝邂逅天然裂缝:COMSOL相场法中的"海马尾巴"转向现象解析 在油气田开发领域,水力压裂技术正经历着从经验驱动到数字仿真的范式转变。相场法作为断裂力学模拟的前沿方法,以其独特的"无预设路径"优势,…...
在语音对话中,OpenClaw 的语音唤醒词定制化如何实现?
语音唤醒词定制化这件事,听起来像是给机器一个专属的暗号,喊对了它才搭理你。在OpenClaw这类语音对话系统里,实现这个功能,本质上是在解决一个“如何在嘈杂的声音环境里,准确识别出某个特定词汇”的问题。 这和我们平时…...
FlexASIO专业调优实战:解决音频延迟与音质问题的3步诊断法
FlexASIO专业调优实战:解决音频延迟与音质问题的3步诊断法 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https://gitc…...
晶体塑性损伤模型的魔改日常——手把手拆解应力更新核心
基于huang晶体塑性有限元损伤演化代码,包含应力更新,送inp文件. (包含损伤演化)(损伤后应力更新)最近在折腾Huang的晶体塑性框架,发现原版代码在损伤处理上还是太"干净"了。趁着周末撸了个损伤演化模块&…...
从‘保护大熊猫’到游戏设计:用Scratch克隆与子弹机制打造你的第一个塔防小游戏
从“保护大熊猫”到游戏设计:用Scratch克隆与子弹机制打造你的第一个塔防小游戏 当屏幕上那只笨拙的士兵射出第一发子弹,准确击中从天而降的怪物时,12岁的小林突然从椅子上跳了起来——他刚刚用Scratch实现了人生中第一个游戏机制。这个瞬间…...
ddclient与主流网络服务集成:PPP、DHCP、systemd和cron的完美搭配
ddclient与主流网络服务集成:PPP、DHCP、systemd和cron的完美搭配 【免费下载链接】ddclient Ddclient updates dynamic DNS entries for accounts on a wide range of dynamic DNS services. 项目地址: https://gitcode.com/gh_mirrors/dd/ddclient ddclien…...
避坑指南:在Ubuntu 20.04上搞定XTDrone+ORB-SLAM2,我踩过的那些依赖版本坑
避坑指南:在Ubuntu 20.04上搞定XTDroneORB-SLAM2,我踩过的那些依赖版本坑 当你在Ubuntu 20.04上尝试搭建XTDrone与ORB-SLAM2的开发环境时,可能会遇到各种令人抓狂的依赖版本冲突问题。作为一个经历过无数次失败后终于成功配置的开发老手&…...
