如何排查MySQL是否走索引

news2025/3/7 5:22:41

 

博主介绍:✌全网粉丝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 whereUsing index等。

  • 示例

    EXPLAIN SELECT * FROM users WHERE age > 30;

    如果key字段显示索引名称,说明使用了索引;如果typeALL,说明未使用索引。


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 INDEXIGNORE INDEX提示优化器使用或忽略特定索引。

  • 语法

    SELECT * FROM table_name USE INDEX (index_name) WHERE condition;

  • 示例

    SELECT * FROM users USE INDEX (idx_age) WHERE age > 30;


总结

排查MySQL是否走索引的常用方法包括:

  1. 使用EXPLAIN分析执行计划。

  2. 使用SHOW INDEX查看索引信息。

  3. 使用OPTIMIZER_TRACE查看优化器决策。

  4. 使用PROFILING分析查询性能。

  5. 检查慢查询日志。

  6. 强制使用索引(FORCE INDEX)。

  7. 检查索引选择性。

  8. 确保查询条件与索引匹配。

  9. 更新统计信息(ANALYZE TABLE)。

  10. 使用索引提示(USE INDEXIGNORE INDEX)。

通过这些方法,可以快速定位索引使用问题并优化查询性能。

3

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

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

相关文章

摄像头应用编程(三):多平面视频采集

文章目录 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安装 下载完成后…

快速部署:在虚拟机上安装 CentOS 7 的详细步骤

CentOS是一个开源的基于Red Hat Enterprise Linux (RHEL) 的Linux发行版,它的主要目的是提供一个与RHEL相似的操作系统但不包含RHEL的商业支持和服务,完全免费。主要面向那些希望在企业环境中使用稳定、可靠的Linux系统但又不想支付RHEL许可证费用的用户…

【有啥问啥】深入浅出:大模型应用工具 Ollama 技术详解

深入浅出:大模型应用工具 Ollama 技术详解 引言 近年来,大型模型(Large Models,LLMs)技术突飞猛进,在自然语言处理、计算机视觉、语音识别等领域展现出强大的能力。然而,部署和运行这些庞大的…

利用opencv_python(pdf2image、poppler)将pdf每页转为图片

1、安装依赖pdf2image pip install pdf2image 运行.py报错,因为缺少了poppler支持。 2、安装pdf2image的依赖poppler 以上命令直接报错。 改为手工下载: github: Releases oschwartz10612/poppler-windows GitHub 百度网盘: 百度网盘…

大数据测试总结

总结测试要点: 参考产品文档,技术文档梳理以下内容 需求来源 业务方应用场景 数据源,数据格转,数据产出,数据呈现方式(数据消亡史),数据量级(增量,全量&am…

Redis面试常见问题——集群方案

Redis集群方案 在Redis中提供的集群方案总共有三种 主从复制 哨兵模式 分片集群 主从复制 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 主从数据同步原理 单节点Redis的并发能力是有…

Qt:day4

一、作业 1:实现绘图的时候,颜色的随时调整; 2:追加橡皮擦功能; 3:配合键盘事件,实现功能; 当键盘按 ctrlz 的时候,撤销最后一次绘图。 【Headers / widget.h】&#xff…

vue3之echarts仪表盘

vue3之echarts仪表盘 效果如下&#xff1a; 版本 "echarts": "^5.5.1" 核心代码&#xff1a; <template><div ref"chartRef" class"circle"></div> </template> <script lang"ts" setup>…

将PDF转为Word的在线工具

参考视频&#xff1a;外文翻译 文章目录 一、迅捷PDF转换器二、Smallpdf 一、迅捷PDF转换器 二、Smallpdf

MWC 2025|紫光展锐联手美格智能发布5G通信模组SRM812

在2025年世界移动通信大会&#xff08;MWC 2025&#xff09;期间&#xff0c;紫光展锐携手美格智能正式推出了基于紫光展锐V620平台的第二代5G Sub6G R16模组SRM812&#xff0c;以超高性价比方案&#xff0c;全面赋能合作伙伴&#xff0c;加速5G规模化应用在各垂直领域的全面落…

前端基础之ajax

vue-cli配置代理服务器解决跨域问题 我们可以使用一个代理服务器8080&#xff0c;Vue项目8080发送请求向代理服务器8080发送请求&#xff0c;再由在理服务器转发给后端服务器 首先需要在vue.config.js中配置代理服务器 const { defineConfig } require(vue/cli-service) modul…

【无标题】FrmImport

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;四、项目展示五、资源链接 前言 我能抽象出整个世界&#xff0c;但是我不能抽象你。 想让你成为私有常量&#xff0c;这样外部函数就无法访问你。 又想让你成为全局常量&#xff0c;这样在我的…

IP-Guard软件设置P2P升级功能

日常使用IP-Guard软件遇到客户端升级&#xff0c;需要从服务器下载升级包&#xff0c;为了让快速升级&#xff0c;可以配置参数&#xff0c;具体设置见下图&#xff1a; 控制台—策略—定制配置—新增 关键字&#xff1a;obt_dislble_p2p2 内容&#xff1a;2

【Mac】git使用再学习

目录 前言 如何使用github建立自己的代码库 第一步&#xff1a;建立本地git与远程github的联系 生成密钥 将密钥加入github 第二步&#xff1a;创建github仓库并clone到本地 第三步&#xff1a;上传文件 常见的git命令 git commit git branch git merge/git rebase …

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…

【TCP/IP协议栈】【传输层】端口号、套接字、多路复用/分解、网络字节序

参考资料&#xff1a; 前言&#xff1a; 总结&#xff1a; 【计算机网络】套接字&#xff08;应用层和传输层之间的接口&#xff09; 套接字是一个通用的通信接口抽象不仅限于TCP/IP协议族作为应用层和传输层之间的桥梁支持多种通信方式和协议族 套接字定义 在 TCP 或者 UDP…

【漫话机器学习系列】120.参数化建模(Parametric Modeling)

参数化建模&#xff08;Parametric Modeling&#xff09;详解 1. 引言 在数据建模和机器学习中&#xff0c;参数化建模&#xff08;Parametric Modeling&#xff09;是一种广泛应用的建模方法。它通过假设一个函数形式来表达变量之间的关系&#xff0c;并估算该函数的参数&am…