【MySQL进阶之路 | 高级篇】索引失效

news2024/9/20 10:57:59

1. SQL查询优化

我们可以从下面几个方面进行数据库调优:

  • 索引失效,没有充分利用到索引-->索引建立
  • 关联查询太多JOIN-->SQL优化
  • 服务器调优及各个参数设置-->调整my.cnf
  • 数据过多-->分库分表

虽然SQL查询优化的技术很多,但大方向上完全可以分为物理查询优化和逻辑查询优化

  • 物理查询优化是通过索引和表连接方式来进行优化,这里重点需要掌握索引的使用。
  • 逻辑查询优化是通过SQL等价变换提升查询效率,直白点就是说,换一种查询写法执行效率可能更高。

2. 索引失效案例

MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度,因此索引对查询的速度有着至关重要的影响。

其实用不用索引,最终都是优化器说了算,优化器是基于cost开销,它不是基于规则,也不是基于语义,怎么样开销小怎么来。另外,SQL语句是否使用索引,根数据库版本,数据量,数据选择度都有关系。

1). 计算,函数,类型转换导致索引失效

fc31e61824a540cfb0fb09a54ffbea9e.png

前者比后者更好,因为前者可以用到索引,而后者因为使用了函数(因为不确定函数会返回什么,所以需要遍历全表)导致索引失效。

f6d3afcb0f7b4d8b8b869922c734b5c2.png

name是字符串类型,等值与整数匹配时,字符串类型会隐式转换为整型,导致索引失效。

2). 范围条件右边的列索引失效

5e05d54a3fa74130822d1e6450c38624.png

情况二是范围查询,导致第三个索引列失效,即name索引列失效。

因为一旦第二个索引列进行了范围查询,此时记录的第三个索引列的值是无序的,第三个索引列进行等值匹配时需要扫描第二个索引列剩下的记录,导致其后面的索引列失效。

3). 不等于索引失效

4). is null可以使用索引,is not null不可以使用索引

is not null由于查询的记录数很大,可能不使用索引比使用索引的效率还要高。

5). like以通配符%开头的索引失效

通配符开头无法匹配,走不了b+树。

6). OR前后存在非索引的列,索引失效

在WHERE语句中,如果在OR前的条件列进行了索引,而在OR后的条件列没有进行索引,那么索引会失效。也就是说,当OR前后两个条件的列都是索引列的时候,查询中才会使用索引。、

因为OR的含义就是两个只要满足一个就可以,因此只有一个条件列进行了索引是没有意义的,因只要有条件列没有进行索引,就会进行全表扫描,因此索引的条件列也会失效。

7). 字符集转换

统一使用utf8mb4兼容性更好,统一字符集可以避免由于字符集转换产生的乱码。不同的字符集进行比较前需要进行转换会造成索引失效。

3. 建议

  1. 对于单列索引,尽量选择针对当前查询过滤性更好的索引
  2. 在选择组合索引时,当前查询中过滤性最好的字段在索引字段顺序中,位置越靠前越好。(最左前缀原则)
  3. 在选择组合索引时,尽量选择能包含当前查询中的where子句中更多字段的索引。
  4. 在选择组合索引时,如果某个字段可能出现范围查询,尽量把这个字段放在索引次序的最后面。

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

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

相关文章

Google最新开源大语言模型:Gemma 2介绍及其微调(上篇)

引言 简介 Gemma 2模型介绍 架构设计 训练方法 后训练优化 关键发现:知识蒸馏的影响 性能评估 使用 体验:Hugging Chat 如何提示 Gemma 2 基于Hugging Face Transformers 结论与展望 模型汇总 引言 两岸荔枝红,万家烟雨中。 小伙伴们好&am…

蓝桥杯Python算法竞赛常用的函数库

博客主页:音符犹如代码系列专栏:Python关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ ​ 目录 math collectcions heapq functool itertools 常用的库函数 m…

【学习笔记】Elasticsearch学习汇总(包含SpringData、Spark、Flink操作)

文章目录 前言数据类型种类ES解决什么问题ELK StackES是什么数据格式正排(正向)索引倒排索引创建索引索引查询索引删除创建文档(添加数据)自定义ID 简单查询类似于主键查询查询所有数据 修改数据全量修改局部修改 删除数据条件查询请求路径(不推荐)请求体全查询分页查询指定查询…

为什么基于 GPT-LLM 的大模型会认为 9.11 大于 9.9?

本心、输入输出、结果 文章目录 为什么基于 GPT-LLM 的大模型会认为 9.11 大于 9.9?前言GPT 大模型认为 9.9 和 9.11 谁大通义千问文心一言ChatGPT 4o为什么基于 GPT-LLM 的大模型会认为 9.11 大于 9.9?为什么基于 GPT-LLM 的大模型会认为 9.11 大于 9.9? 编辑 | 简简单单 O…

2024.7.16(使用光盘创建本地仓库、引入网络镜像仓库、创建自建仓库)

了解yum源安装软件包 了解常用的网络yum源 掌握本地和网络yum源配置 能够使用yum工具安装软件包 yum安装优点: rpm安装 (下载软件、单独安装、需要解决依赖关系) rpm -ivh xxx 手动添加依赖软件包 源码安装(configure make…

vue3【详解】跨组件通信 -- 依赖注入 provide inject

用于解决跨组件&#xff08;父组件与所有后代&#xff09;数据通信 提供数据 provide 传出数据的组件 &#xff08;通常为父辈组件&#xff09;提供数据 <script setup> import { provide } from vueprovide(/* 注入名 */ message, /* 值 */ hello!) </script>pro…

vivado FFT IP Core

文章目录 前言FFT IP 接口介绍接口简介tdata 格式说明 其他细节关于计算精度及缩放系数计算溢出架构选择数据顺序实时/非实时模式数据输入输出时序关于配置信息的应用时间节点 FFT IP 例化介绍控制代码实现 & 测试速度测试参考文献 前言 由于计算资源受限&#xff0c;准备将…

【Matlab】RBF径向基神经网络回归预测算法(附代码)

资源下载&#xff1a; 资源合集&#xff1a; 目录 一&#xff0c;概述 RBF 神经网络&#xff08;Radial Basis Function Neural Network&#xff09;是一种基于径向基函数的前向型神经网络。它的特点是具有快速的训练速度和良好的泛化性能。 RBF 神经网络的基本结构包括输入层…

探索 Electron:如何利用Electron和Vite打造高效桌面应用

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

三、建造者模式

文章目录 1 基本介绍2 案例2.1 Car 类2.2 CarBuilder 抽象类2.3 EconomyCarBuilder 类2.4 LuxuryCarBuilder 类2.5 CarDirector 类2.6 测试程序2.7 测试结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 Product ( 产品 )3.1.2 Builder ( 抽象建造者 )3.1.3 ConcreteBuilder ( 具…

电阻有哪些参数呢

电阻是电路中最常见的元件之一&#xff0c;它在控制电流、分压和保护电路等方面发挥着重要作用。了解电阻的主要参数对于选择和使用电阻至关重要。本文将详细介绍电阻的主要参数&#xff0c;包括电阻值、功率额定值、温度系数、容差、噪声、频率特性、体积和封装等。 1. 电阻值…

长模式下的分页

前提 如果开启了长模式&#xff0c;则必须同时开启分页模式&#xff0c;因为长模式弱化了分段模型而分段模型也确实有很多不足&#xff0c;不适应现在操作系统和应用软件的发展长模式也扩展了 CPU 的位宽&#xff0c;使得 CPU 能使用 64 位的超大内存地址空间所以&#xff0c;…

当一个程序员的博客突然变少

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen hello&#xff0c;伙伴们好久不见。马上到了八月&#xff0c;也是我在个人公众号…

JMeter介绍、安装配置以及快速入门

文章目录 1. JMeter简介2. JMeter安装配置3. JMeter快速入门 1. JMeter简介 Apache JMeter是一款开源的压力测试工具&#xff0c;主要用于测试静态和动态资源&#xff08;如静态文件、服务器、数据库、FTP服务器等&#xff09;的性能。它最初是为测试Web应用而设计的&#xff…

ETAS StackM配置及使用-stack监控

文章目录 前言Stack基本介绍StackM配置StackMTargetStackMGeneral Linker配置EcuM配置RTE配置集成与测试总结 前言 嵌入式C语言执行的软件中&#xff0c;stack溢出会导致程序执行异常&#xff0c;严重可能导致直接进硬件异常中断(hardfault)。软件执行过程中的stack监控是非常…

【JAVA多线程】Future,专为异步编程而生

目录 1.Future 2.CompletableFuture 2.1.为什么会有CompletableFuture&#xff1f; 2.2.使用 2.2.1.提交任务获取结果 2.2.2.回调函数 2.2.3.CompletableFuture嵌套问题 1.Future Java中的Future接口代表一个异步计算。其提供了一组规范用来对异步计算任务进行管理控制…

java项目(knife4j使用,静态资源未放在static资源包下,公共字段自动填充,Spring Cache与Spring Task)

Knife4j&#xff08;生成接口文档&#xff09; 使用swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面。官网:https://swagger.io/ Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。…

uni-app 影视类小程序开发从零到一 | 开源项目推荐

引言 在数字娱乐时代&#xff0c;对于电影爱好者而言&#xff0c;随时随地享受精彩影片成为一种日常需求。分享一款基于 uni-app 开发的影视类小程序。它不仅提供了丰富的影视资源推荐&#xff0c;还融入了个性化知乎日报等内容&#xff0c;是不错的素材&#xff0c;同时对电影…

Springboot同时支持http和https访问

springboot默认是http的 一、支持https访问 需要生成证书&#xff0c;并配置到项目中。 1、证书 如果公司提供&#xff0c;则直接使用公司提供的证书&#xff1b; 如果公司没有提供&#xff0c;也可自己使用Java自带的命令keytool来生成&#xff1a; &#xff08;1&#x…

JavaWeb笔记_Cookie

一.会话技术概述 在日常生活中,A和B之间在打电话过程中一连串的你问我答就是一个会话 在BS模型中,会话可以理解为通过浏览器访问服务端的资源,点击超链接可以进行资源的跳转,直到浏览器关闭过程叫做会话 我们使用会话技术可以解决的是整个会话过程中(通过浏览器浏览服务…