MYSQL索引优化方法

👏作者简介:大家好,我是小周同志,25届双非校招生Java选手,很高兴认识大家

📕学习出处:本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇

🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦

有什么优化索引的方法?

前缀索引优化

就是使用 某个字段中字符串的前几个字符 建立索引

  • 为什么需要前缀来建立索引呢?

    • 为了减小索引字段大小,可以增加一个索引页中存储的索引值,有效提高索引的查询速度。

    • 在一些大字符串的字段作为索引时,使用前缀索引可以帮助我们减小索引项的大小。

  • 前缀索引的局限性:

    • order by 就无法使用前缀索引

    • 无法把前缀索引用作覆盖索引

覆盖索引优化

覆盖索引就是只需要 二级索引的b+树 就能得到需要查询的数据,而不需要 主键索引的b+树,减少了回表操作

  • 比如 select id where name = 'aaa'; 其中主键索引id,name是二级索引。

    • 这里会用到 覆盖索引,因为二级索引b+树的叶子节点就是主键索引的id。因为查询只需要查询id所以就减少了回表操作,不需要再回表到主键索引通过的b+树去查询数据了。

主键索引最好是自增的

  • 如果主键索引是自增的:

    • 那么每次插入的新数据就会按顺序添加到当前索引节点的位置,不需要移动已有的数据,当页面写满,就会自动开辟一个新页面。因为每次插入一条新记录,都是追加操作,不需要重新移动数据,因此这种插入数据的方法效率非常高。

  • 如果我们使用非自增主键:

    • 由于每次插入主键的索引值都是随机的,因此每次插入新的数据时,就可能会插入到现有数据页中间的某个位置,这将不得不移动其它数据来满足新数据的插入,甚至需要从一个页面复制数据到另外一个页面,我们通常将这种情况称为 页分裂页分裂还有可能会造成大量的内存碎片,导致索引结构不紧凑,从而影响查询效率。(因为一个数据页只能存16KB)

因此,在使用 InnoDB 存储引擎时,如果没有特别的业务需求,建议使用自增字段作为主键。

另外,主键字段的长度不要太大,因为主键字段长度越小,意味着二级索引的叶子节点越小(二级索引的叶子节点存放的数据是主键值),这样二级索引占用的空间也就越小

索引最好设置为 NOT NULL

为了更好的利用索引,索引列要设置为 NOT NULL 约束。有两个原因:

  • 原因一:索引值为NULL,会使优化器在做索引选择时更加复杂,更加难以优化。比如进行索引统计时,count 会省略值为NULL的行。

  • 原因二:NULL是个没意义的值,会占用物理空间。因为 InnoDB 存储记录时,如果表中存在允许为NULL的字段,那么行格式中 至少会用 1字节空间存储NULL值列表。

防止索引失效

用上了索引并不意味着查询的时候用上了索引。有些情况会导致索引失效。

生索引失效的情况:

  • 当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx%这两种方式都会造成索引失效;

  • 当我们在查询条件中对索引列做了计算、函数、类型转换操作,这些情况下都会造成索引失效;

  • 联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效。

  • 在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。

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

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

相关文章

R语言计算:t分布及t检验

t分布理论基础 t分布也称Student’s t-distribution,主要出现在小样本统计推断中,特别是当样本量较小且总体标准差未知时,用于估计正态分布的均值。其定义基于正态分布和 X 2 X^{2} X2分布(卡方分布)。如果随机变量X服…

冯诺依曼体系结构+操作系统

操作系统篇 文章目录 一、冯诺依曼体系结构(1) 硬件数据流动角度,在数据层面:(2)程序运行为什么要加载到内存? 二、操作系统(Operator System)(1) Why 要有操作系统?(2)如何理解 “管理” ? 一、冯诺依曼体系结构 /*-…

springCloudAlibaba集成seata实战(分布式事物详解)

一、分布式事务 1. 事务介绍 1.1 基础概念 事务:保证我们多个数据库操作的原子性,多个操作要么都成功要么都不成功 事务ACID原则 A(Atomic)原子性:构成事务的所有操作,要么都执行完成,要么全部…

三次握手与四次挥手到底是怎么回事?

三次握手和四次挥手是TCP/IP协议中建立和断开连接的关键步骤,它们是保证可靠通信的重要机制。这里将探讨这两个概念,并解释它们背后的原理。 三次握手 三次握手用于建立TCP连接,它由客户端和服务器之间发送的三个报文组成: 第一次…

市场份额第一:SmartX 领跑 23全年中国超融合软件市场

日前,IDC 发布《中国软件定义存储(SDS)及超融合存储系统(HCI)市场季度跟踪报告,2023 年第四季度》,详解中国区超融合发展趋势、市场份额规模以及厂商占比。 IDC 数据显示,2023 年全…

高防IP的技术实现

1. 分布式架构:高防IP采用分布式架构部署,将流量均匀分散到多个服务器上进行处理,以达到承载大流量攻击的能力。这样可以减轻单个服务器的负载压力,提高抗攻击能力。 架构设计: - 前端负载均衡器:用于接…

rust使用print控制台打印输出五颜六色的彩色红色字体

想要在控制台打印输出彩色的字体,可以使用一些已经封装好的依赖库,比如ansi_term这个依赖库,官方依赖库地址:https://crates.io/crates/ansi_term 安装依赖: cargo add ansi_term 或者在Cargo.toml文件中加入&#…

带洞平面三角分割结果的逆向算法

先标不重复点,按最近逐个插入。 只说原理。 不带洞的 1 2 4 2 3 4 两个三角形 结果 1 2 3 4 无重复 无洞 1 2 6 1 2 3 6 1 2 3 7 6 1 2 3 4 7 6 1 2 3 4 5 7 6 1 2 3 4 1 5 7 6 1 2 3 4 1 6 5 7 6 最终结果 1 2 3 4 1 6 5 7 6 按重复分割 1 2 3…

自定义滚动条样式:前端实现跨浏览器兼容

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

好好开始文生图

基于transformer 以前UNET架构,基于卷积,现在把卷积换成transformer Diffusion transformer 数据更少,文本数据就要更优质 训好了,通过增加额外模块,提高文本质量 如果给的文本时粗粒度的,那么生成的图片…

【mac】【python】新建项目虚拟环境后,使用命令pip出现错误:zsh: command not found: pip

【mac】【python】新建项目虚拟环境后,使用命令pip出现错误:zsh: command not found: pip 问题描述: 拉取或者创建新的python项目时,为项目添加了新的解释器,创建啦虚拟环境,但是执行pip命令的时候找不到命…

LeetCode 面试经典150题 202.快乐数

题目: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结…

《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念,听到的时候还以为是说CSS的伪类呢,网上一查,这东西原来还是个很常见的家伙。 何为伪数组 伪数组有两个特点: 具有length属性,其他属性(索引)为非负整数但是却不具备…

C ++ 和 C语言的优缺点分别是什么?

C语言,它简直就是编程世界的一块磐石。简洁、直接,让人一眼就能明白它想干嘛。它的运行速度快,接近硬件操作,特别适合那些需要直接与硬件打交道的场景。但就是因为这种接近硬件的特性,C语言在抽象层次上就显得有点捉襟…

【MCU开发规范】:MCU的性能测试

MCU的性能测试 前序性能评判方法MIPSCoreMark EEMBC其他参考 前序 我们平时做MCU开发时,前期硬件选型(选那颗MCU)基本由硬件工程师和架构决定,到软件开发时只是被动的开发一些具体功能,因此很少参与MCU的选型。 大部分…

Harbor Deployment (Helm)

文章目录 Harbor Deployment (Helm)前期准备创建stl证书 Harbor 部署推送镜像 Harbor Deployment (Helm) Helm 部署 Harbor需要使用共享存储,docker-compose 部署使用单台宿主机存储。 前期准备 创建stl证书 # 模拟域名,公司可以申请内部域名 # VIP bi…

linux(ub)-redis环境部署

1.下载redis包 wget http://download.redis.io/releases/redis-7.0.5.tar.gz 2.解压缩: tar -zxvf redis-7.0.5.tar.gz 3.安装gcc:sudo apt-get install gcc 4. 编译:cd redis-7.0.5 make make make install 5. cd /usr/local/bin/ 6. mkdir …

spring xml 集成Redission集群

1、引入redission <jackson-databind.version>2.8.2</jackson-databind.version><jackson-core.version>2.8.2</jackson-core.version><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId>&…

财务软件有哪些优势?

提高准确性 财务软件可以提高会计做账的准确性&#xff0c;相对于人工计算的繁琐复杂&#xff0c;软件通过程序计算&#xff0c;可以大大降低出错率。而且财务软件有很多自动化功能&#xff0c;财务软件有结账自动结转损益、银行现金不能为负数等等功能、年末自动结转本年利润等…

SSL证书和IP证书的区别

SSL证书是一种用于保障网络传输安全的数字证书&#xff0c;它通过为网站提供加密服务&#xff0c;确保用户与网站之间交换的数据不被第三方截取或篡改。IP证书是一种用于验证和保护IP地址的数字证书。它是通过将IP地址与其所有者的身份信息相联系&#xff0c;从而确保IP地址的真…