MySQL--索引优化实战篇(2)

前言:

我们常说的SQL优化,简单来说就是索引优化,通过合理创建索引,调整SQL语法等,来提升查询效率,想要进行SQL优化,就必须知道索引的原理,而且能够看懂SQL的执行计划。

MySQL–索引底层数据结构详解
MySQL–索引类型详解
MySQL–explain执行计划详解

准备数据:
本篇数据都基于上一篇,传送门如下:

MySQL–索引优化实战篇(1)

案例一:

explain select * from user where age=25 and address='广东';

执行计划:
在这里插入图片描述
分析执行计划:

  • 我们知道表中存在的索引是 index_name,index_name_age_address,age、address列明明是建立了索引的,而我们却没有用到任何索引,为什么?

最左前缀法则:
最左前缀法则指的是要从联合索引的最左侧列开始,如果最左侧的列没有作为查询条件,那就无法使用这个联合索引。

案例二:

explain select * from user where user_name='张三' and age=25 and address='广东';

执行计划:
在这里插入图片描述
分析执行计划:

  • 我们知道可能用到的索引是 index_name,index_name_age_address,我们的SQL语句遵循了最左前缀法则,这次我们用到了索引index_name_age_address,没有问题。
  • 再来看看key_len:1006,我们的user_name 字段是 varchar(50) utf8mb4 编码,50 * 4 + 2 = 202,age字段 tinyint 类型占用一个字节,且age字段可以为空,再占用一个字节,共占用2个字节,我们的 address 字段是varchar(200) utf8mb4 编码,200 * 4 + 2 = 802,202 + 2 + 802 = 1006,没有问题。
  • rows:1,user_name为张三,age为25,address 为广东,只有一条数据,没有问题。
  • filtered:100,经过过滤后只有一条,且只需要一条,没有问题。

案例三:
因为我们的 user 表中有索引 index_name,index_name_age_address,为了避免 index_name 对我们的结果有影响,我们先隐藏 index_name 索引。

#隐藏 user 的索引 index_name ,避免 index_name  对结果有影响
alter table user alter index index_name INVISIBLE;

执行如下SQL:

explain select * from user where user_name='张三';

执行结果:

在这里插入图片描述
根据执行计划可知,使用的索引是index_name_age_address,在上一篇中我们验证过,同样的SQL,使用到的索引是index_name,
证明隐藏索引生效了。

取消索引隐藏SQL语法:

#取消tablename 的索引index_name 的隐藏
ALTER TABLE tablename ALTER  INDEX  index_name VISIBLE; 

案例三的重点来了,执行如下SQL:

explain select * from user where user_name='张三' and address='广东';

执行计划:

在这里插入图片描述

分析执行计划:

  • 我们知道可能用到的索引是 index_name_age_address,这次我们用到的索引是 index_name_age_address,没有问题。
  • 再来看看key_len:202,我们的user_name 字段是 varchar(50) utf8mb4编码,50 * 4 + 2 = 202,证明只用了user_name 字段 。
  • rows:2,user_name 为张三, 有2条数据,没有问题。
  • filtered:33.33,这个没有看明白,欢迎各位大佬评论指导。
  • Using index condition,查询条件虽然用到了索引列,但是有部分条件无法使用索引列,先会使用索引列的条件搜索一遍,在使用其他条件搜索。

案例四:

explain select * from user where address='广东' and age=28;

执行计划:
在这里插入图片描述
分析执行计划:

  • 没有用到索引,因为address、age都不是联合索引 index_name_age_address 最左的列,不符合最左前缀法则,没有问题。

总结:最左前缀法则会根据联合索引字段顺序依次去更where 后的筛选条件进行对比,直到出现跳字段为止,比如本案例跳过了age字段,就只能使用 index_name_age_address 索引中的 user_name 字段,where 条件中打乱联合索引的字段顺序是没有问题的,这里就不做演示了,有兴趣的可以去验证一下。

如有不正确的地方请各位指出纠正。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据保护设备的主要功能是什么

数据保护设备在当今数字化时代扮演着至关重要的角色。随着信息技术的迅猛发展,数据的产生、传输和存储量呈现出爆炸式增长,数据的安全性和完整性成为了企业和个人关注的重点。数据保护设备作为保障数据安全的重要手段,正逐渐受到广泛关注和应…

Python图像处理【22】基于卷积神经网络的图像去雾

基于卷积神经网络的图像去雾 0. 前言1. 渐进特征融合网络2. 图像去雾2.1 网络构建2.2 模型测试 小结系列链接 0. 前言 单图像去雾 (dehazing) 是一个具有挑战性的图像恢复问题。为了解决这个问题,大多数算法都采用经典的大气散射模型,该模型是一种基于单…

基于多源信息融合的巡飞弹对地目标识别与毁伤评估

源自:系统仿真学报 作者:徐艺博 于清华 王炎娟 郭策 冯世如 卢惠民 “人工智能技术与咨询” 发布 摘 要 面向利用多枚巡飞弹对地面高防御移动目标进行打击的任务场景,提出一种基于多源信息融合的巡飞弹对地移动目标识别与毁伤评估方法…

Vue2利用创建a标签实现下载本地静态文件到本地电脑上的功能

最近PC项目遇到一个需求,那就是需要前端下载前端代码包里的前端文件到本地,并且可以给下载下来的文件名指定任意的文件名,如下图所示,在前端代码里public里的statics里有个静态文件zswj.pem,页面上有个下载按钮&#x…

基于.Net 的图形验证码模块

🏆作者:科技、互联网行业优质创作者 🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 🏆欢迎关注我(Net数字智慧化基地),里面…

ARM TrustZone技术解析:构建嵌入式系统的安全扩展基石

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-dSk2aQ85ZR0zxnyI {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

【Python】科研代码学习:七 TrainingArguments,Trainer

【Python】科研代码学习:七 TrainingArguments,Trainer TrainingArguments重要的方法 Trainer重要的方法使用 Trainer 的简单例子 TrainingArguments HF官网API:Training 众所周知,推理是一个大头,训练是另一个大头 之…

微信小程序(五十三)修改用户头像与昵称

注释很详细,直接上代码 上一篇 新增内容: 1.外界面个人资料基本模块 2.资料修改界面同步问题实现(细节挺多,考虑了后期转服务器端的方便之处) 源码: app.json {"window": {},"usingCompone…

盘点CSV文件在Excel中打开后乱码问题的两种处理方法

目录 一、CSV文件乱码问题概述 二、修改文件编码格式 1.识别CSV文件编码 2.修改编码格式 3.在Excel中打开修改后的CSV文件 案例 三、利用文本编辑器进行预处理 1.打开CSV文件并检查乱码 2.替换或删除乱码字符 3.保存并导入Excel 案例 四、注意事项 1、识别原始编码…

vulhub中Weblogic WLS Core Components 反序列化命令执行漏洞复现(CVE-2018-2628)

Oracle 2018年4月补丁中,修复了Weblogic Server WLS Core Components中出现的一个反序列化漏洞(CVE-2018-2628),该漏洞通过t3协议触发,可导致未授权的用户在远程服务器执行任意命令。 访问http://your-ip:7001/consol…

CodeReview 规范及实施

优质博文:IT-BLOG-CN 一、为什么需要CodeReview 随着业务压力增大,引发代码质量下降,代码质量的下降导致了开发效率的降低,维护成功高等问题,开发效率下降后又加重了业务压力,最终陷入了死亡三角的内耗之…

腾讯云服务器99元一年厉害了,老用户可以买,续费也是99元

良心腾讯云推出99元一年服务器,新用户和老用户均可以购买,续费不涨价,续费也是99元,配置为轻量2核2G4M、50GB SSD盘、300GB月流量、4M带宽:优惠价格99元一年,续费99元,官方活动页面 txybk.com/g…