如何排查MySQL是否走索引

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌
博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。
🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
Java项目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》https://blog.csdn.net/qq_57756904/category_12173599.html
有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。
最后再送一句:最好是学会了,而不是学废了!!
2
如何排查MySQL是否走索引
排查MySQL是否走索引可以通过多种方法,以下是常用的排查手段:
1. 使用EXPLAIN命令
EXPLAIN是分析SQL语句执行计划的关键工具,可以查看MySQL是否使用了索引。
-
语法:
EXPLAIN SELECT * FROM table_name WHERE condition; -
关键字段:
-
type:表示访问类型,常见值:-
ALL:全表扫描,未使用索引。 -
index:全索引扫描。 -
range:索引范围扫描。 -
ref:使用非唯一索引查找。 -
eq_ref:使用唯一索引查找。 -
const:使用主键或唯一索引查找单行。
-
-
key:实际使用的索引名称。 -
rows:扫描的行数,越小越好。 -
Extra:额外信息,如Using where、Using index等。
-
-
示例:
EXPLAIN SELECT * FROM users WHERE age > 30;如果
key字段显示索引名称,说明使用了索引;如果type为ALL,说明未使用索引。
2. 使用SHOW INDEX命令
查看表的索引信息,确认索引是否存在。
-
语法:
SHOW INDEX FROM table_name; -
输出:
-
Table:表名。 -
Key_name:索引名称。 -
Column_name:索引列。 -
Index_type:索引类型(如BTREE)。
-
-
示例:
SHOW INDEX FROM users;确认索引是否存在以及索引的列。
3. 使用OPTIMIZER_TRACE
OPTIMIZER_TRACE可以查看优化器的详细决策过程,包括是否选择使用索引。
-
启用
OPTIMIZER_TRACE:SET optimizer_trace="enabled=on"; -
执行查询:
SELECT * FROM users WHERE age > 30; -
查看跟踪信息:
SELECT * FROM information_schema.optimizer_trace; -
关闭
OPTIMIZER_TRACE:SET optimizer_trace="enabled=off";
4. 使用PROFILING
PROFILING可以查看查询的执行时间,间接判断是否使用了索引。
-
启用
PROFILING:SET profiling = 1; -
执行查询:
SELECT * FROM users WHERE age > 30; -
查看性能分析:
SHOW PROFILES; -
查看详细执行信息:
SHOW PROFILE FOR QUERY 1;
5. 使用慢查询日志
如果查询较慢,可以通过慢查询日志分析是否未使用索引。
-
启用慢查询日志:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; -- 设置慢查询阈值(秒) -
查看慢查询日志路径:
SHOW VARIABLES LIKE 'slow_query_log_file'; -
分析日志:
查看日志中是否有未使用索引的查询。
6. 使用FORCE INDEX强制使用索引
如果怀疑优化器未选择正确的索引,可以强制使用索引。
-
语法:
SELECT * FROM table_name FORCE INDEX (index_name) WHERE condition; -
示例:
SELECT * FROM users FORCE INDEX (idx_age) WHERE age > 30;强制使用
idx_age索引后,观察查询性能是否提升。
7. 检查索引选择性
索引选择性是指索引列中不同值的比例,选择性越高,索引效果越好。
-
计算选择性:
SELECT COUNT(DISTINCT column_name) / COUNT(*) FROM table_name;结果越接近1,选择性越高。
8. 检查查询条件
确保查询条件与索引列匹配,避免以下情况:
-
对索引列使用函数或表达式。
-
使用
LIKE以通配符开头。 -
数据类型不匹配。
9. 使用ANALYZE TABLE更新统计信息
如果表的统计信息过时,优化器可能无法正确选择索引。
-
语法:
ANALYZE TABLE table_name; -
示例:
ANALYZE TABLE users;
10. 使用INDEX HINT提示优化器
通过USE INDEX或IGNORE INDEX提示优化器使用或忽略特定索引。
-
语法:
SELECT * FROM table_name USE INDEX (index_name) WHERE condition; -
示例:
SELECT * FROM users USE INDEX (idx_age) WHERE age > 30;
总结
排查MySQL是否走索引的常用方法包括:
-
使用
EXPLAIN分析执行计划。 -
使用
SHOW INDEX查看索引信息。 -
使用
OPTIMIZER_TRACE查看优化器决策。 -
使用
PROFILING分析查询性能。 -
检查慢查询日志。
-
强制使用索引(
FORCE INDEX)。 -
检查索引选择性。
-
确保查询条件与索引匹配。
-
更新统计信息(
ANALYZE TABLE)。 -
使用索引提示(
USE INDEX或IGNORE INDEX)。
通过这些方法,可以快速定位索引使用问题并优化查询性能。
3
相关文章:
如何排查MySQL是否走索引
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...
AF3 curry1函数解读
AlphaFold3 data_transforms 模块的 curry1 函数实现了一个经典的柯里化 (currying) 技术,具体是固定函数 f 的所有参数,除了第一个参数。换句话说,curry1 允许你在调用函数时,先提供除了第一个参数之外的所有参数,然后返回一个新的函数,这个新函数只等待第一个参数。 …...
摄像头应用编程(三):多平面视频采集
文章目录 1、前言2、环境介绍3、步骤4、应用程序编写5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 在查看摄像头类型时,大致可以分为两类:Video Capture 和 Video Capture Multiplanar。 本次应用程序主要针对类型为Video Capture Multi…...
【GoTeams】-2:项目基础搭建(下)
本文目录 1. 回顾2. Zap日志3. 配置4. 引入gprc梳理gRPC思路优雅关闭gRPC 1. 回顾 上篇文章我们进行了路由搭建,引入了redis,现在来看看对应的效果。 首先先把前端跑起来,然后点击注册获取验证码。 再看看控制台输出和redis是否已经有记录&…...
02-双指针-A-B 数对
题目 链接:P1102 A-B 数对 - 洛谷 思路 问题场景想象 我们可以把这个问题想象成在一个排队的队伍里找符合特定身高差的人对。给定的数列里的每个数就好比队伍里每个人的身高,而差值 C 就是我们要找的身高差。我们的目标是找出队伍里所有身高差恰好是 …...
2025年Cursor最新安装使用教程
Cursor安装教程 一、Cursor下载二、Cursor安装三、Cursor编辑器快捷键(1) 基础编辑快捷键(2) 导航快捷键(3) 其他常用快捷键 一、Cursor下载 Cursor官方网站(https://www.cursor.com/ ) 根据自己电脑操作系统选择对应安装包 二、Cursor安装 下载完成后…...
Modbus TCP/IP 与 RS-485 接口的兼容性
Modbus TCP/IP 和 RS-485 接口的 直接兼容性 不存在,因为两者分属不同的网络层次(TCP/IP 基于以太网,RS-485 是物理层接口),但通过 协议转换和网络架构设计 可以实现互联互通。以下是详细的技术解析与实现方案: 一、协议差异对比 特性Modbus TCP/IPModbus RTU(RS-485)物…...
快速部署:在虚拟机上安装 CentOS 7 的详细步骤
CentOS是一个开源的基于Red Hat Enterprise Linux (RHEL) 的Linux发行版,它的主要目的是提供一个与RHEL相似的操作系统但不包含RHEL的商业支持和服务,完全免费。主要面向那些希望在企业环境中使用稳定、可靠的Linux系统但又不想支付RHEL许可证费用的用户…...
better-sqlite3之exec方法
在 better-sqlite3 中,.exec() 方法用于执行包含多个 SQL 语句的字符串。与预编译语句相比,这种方法性能较差且安全性较低,但有时它是必要的,特别是当你需要从外部文件(如 SQL 脚本)中执行多个 SQL 语句时。…...
NDT 代价函数
SLAM 中的 NDT 代价函数 在SLAM(同步定位与地图构建)中,NDT(Normal Distributions Transform)是一种常用的点云配准方法。NDT代价函数用于评估点云配准的质量。以下是NDT代价函数的详细介绍: NDT 代价函数…...
【有啥问啥】深入浅出:大模型应用工具 Ollama 技术详解
深入浅出:大模型应用工具 Ollama 技术详解 引言 近年来,大型模型(Large Models,LLMs)技术突飞猛进,在自然语言处理、计算机视觉、语音识别等领域展现出强大的能力。然而,部署和运行这些庞大的…...
【AI训练】如何提高LLM的训练速度
提高大型语言模型(LLM)的训练速度需要从算法优化、硬件加速、软件框架和基础设施等多个层面综合考虑。以下是一些关键方法,按类别分类说明: --- 一、硬件优化 1. 分布式训练 - 数据并行(Data Parallelism)…...
利用opencv_python(pdf2image、poppler)将pdf每页转为图片
1、安装依赖pdf2image pip install pdf2image 运行.py报错,因为缺少了poppler支持。 2、安装pdf2image的依赖poppler 以上命令直接报错。 改为手工下载: github: Releases oschwartz10612/poppler-windows GitHub 百度网盘: 百度网盘…...
大数据测试总结
总结测试要点: 参考产品文档,技术文档梳理以下内容 需求来源 业务方应用场景 数据源,数据格转,数据产出,数据呈现方式(数据消亡史),数据量级(增量,全量&am…...
pytorch高可用的设计策略和集成放大各自功能
在使用 PyTorch 编写模型时,为确保模型具备高可用性,可从模型设计、代码质量、训练过程、部署等多个方面采取相应的方法,以下为你详细介绍: 模型设计层面 模块化设计 实现方式:将模型拆分成多个小的、独立的模块,每个模块负责特定的功能。例如,在一个图像分类模型中,可…...
容器 /dev/shm 泄漏学习
容器 /dev/shm 泄漏的介绍 在容器环境中,/dev/shm 是一个基于 tmpfs 的共享内存文件系统,通常用于进程间通信(IPC)和临时数据存储。由于其内存特性,/dev/shm 的大小是有限的,默认情况下 Docker 容器的 /de…...
Redis面试常见问题——集群方案
Redis集群方案 在Redis中提供的集群方案总共有三种 主从复制 哨兵模式 分片集群 主从复制 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 主从数据同步原理 单节点Redis的并发能力是有…...
企业级Python后端数据库使用指南(简略版)
总述 企业级应用通常需要考虑扩展性、安全性、性能等因素。数据库的使用也不例外。连接数据库的第一步应该是建立连接,但企业环境中可能不会每次操作都新建连接,而是使用连接池来管理,这样可以提高效率,减少资源消耗。例如&#x…...
Qt:day4
一、作业 1:实现绘图的时候,颜色的随时调整; 2:追加橡皮擦功能; 3:配合键盘事件,实现功能; 当键盘按 ctrlz 的时候,撤销最后一次绘图。 【Headers / widget.h】ÿ…...
随机播放音乐 伪随机
import java.util.*;/*** https://cloud.tencent.com.cn/developer/news/1045747* 伪随机播放音乐*/ public class MusicPlayer {private List<String> allSongs; // 所有歌曲列表private List<String> playedSongs; // 已经播放过的歌曲列表private Map<String…...
vue3之echarts仪表盘
vue3之echarts仪表盘 效果如下: 版本 "echarts": "^5.5.1" 核心代码: <template><div ref"chartRef" class"circle"></div> </template> <script lang"ts" setup>…...
将PDF转为Word的在线工具
参考视频:外文翻译 文章目录 一、迅捷PDF转换器二、Smallpdf 一、迅捷PDF转换器 二、Smallpdf...
MWC 2025|紫光展锐联手美格智能发布5G通信模组SRM812
在2025年世界移动通信大会(MWC 2025)期间,紫光展锐携手美格智能正式推出了基于紫光展锐V620平台的第二代5G Sub6G R16模组SRM812,以超高性价比方案,全面赋能合作伙伴,加速5G规模化应用在各垂直领域的全面落…...
js操作数组的常用方法
1. 遍历方法 1.1 forEach 作用:遍历数组中的每个元素,并对每个元素执行回调函数。 是否改变原数组:不会改变原数组。 返回值:undefined。 1.1.1 基本用法 const arr [1, 2, 3]; arr.forEach((item) > console.log(item …...
前端基础之ajax
vue-cli配置代理服务器解决跨域问题 我们可以使用一个代理服务器8080,Vue项目8080发送请求向代理服务器8080发送请求,再由在理服务器转发给后端服务器 首先需要在vue.config.js中配置代理服务器 const { defineConfig } require(vue/cli-service) modul…...
Android车机DIY开发之软件篇(二十)立创泰山派android编译
准备工作 sudo apt-get update sudo apt-get install git -y sudo apt install repo -ysudo apt-get install python2.7sudo apt-get install python3sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 sudo update-alternatives --install /u…...
ADB 和 Monkey 进行 Android 应用的测试和调试
ADB(Android Debug Bridge)和 Monkey 是 Android 开发和测试中常用的工具。ADB 用于与 Android 设备通信,而 Monkey 是一个压力测试工具,可以模拟用户随机操作。以下是它们的高级用法,帮助您更高效地进行 Android 应用测试和调试。 一、ADB 的高级用法 1. 设备管理 查看连…...
【无标题】FrmImport
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)四、项目展示五、资源链接 前言 我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的…...
高并发场景下的数据库优化
在高并发系统中,数据库通常是性能瓶颈。面对高并发请求,我们需要采用合适的优化策略,以保证数据库的稳定性和高效性。本文将介绍数据库高并发问题的成因,并结合 Mybatis-Plus,探讨 乐观锁、悲观锁、高并发优化及数据库…...
IP-Guard软件设置P2P升级功能
日常使用IP-Guard软件遇到客户端升级,需要从服务器下载升级包,为了让快速升级,可以配置参数,具体设置见下图: 控制台—策略—定制配置—新增 关键字:obt_dislble_p2p2 内容:2...
