MySQL慢查询排查,专治各种“卡到崩溃”

mysql慢sql排查与分析 慢查询日志的排查与分析 阅读详情

前言:做后端开发这些年,最怕的就是半夜收到监控报警:“数据库慢查询激增!”。 经历过几次生产事故后,我算是把MySQL慢查询的毛病摸透了。今天就把这些实战经验掰开了揉碎了分享给大家,专治SQL性能的各种不服!

一、慢查询到底“慢”在哪?——揪出元凶

1. 开启慢查询日志,让慢SQL无处遁形

# 查看慢查询配置(默认关闭) 
show variables like '%slow_query_log%';  
# 临时开启慢查询日志(重启失效) 
set global slow_query_log = 'ON';  
# 设置慢查询阈值(单位:秒) 
set global long_query_time = 1;  
# 记录未使用索引的查询 
set global log_queries_not_using_indexes = 'ON'; 

关键点:

  • 日志路径别用默认的,小心磁盘被撑爆!

  • 阈值建议从1秒开始,逐步调整。

  • 用mysqldumpslow工具分析日志,比如:

    mysqldumpslow -s t -t 10 /var/lib/mysql/slow.log  # 按耗时排序取前10 

    2. EXPLAIN执行计划——看懂SQL的“体检报告”

    EXPLAIN SELECT * FROM user WHERE name LIKE '%张%' AND age > 20; 

    重点看这几列:

  • type:ALL(全表扫描)直接拉黑!至少range级别。

  • key:实际使用的索引,NULL就是没走索引。

  • rows:扫描行数,越大越危险。

  • Extra:出现Using filesort或Using temporary,赶紧优化!

二、索引失效的六大“作死”场景(附解法)

场景1:数据类型隐式转换——坑哭新手

-- 电话字段是varchar,但查询用数字 
SELECT * FROM user WHERE phone = 13800138000; -- 索引失效! 
-- 正确写法 
SELECT * FROM user WHERE phone = '13800138000'; 

场景2:对索引列使用函数或运算

-- 生日字段有索引 
SELECT * FROM user WHERE YEAR(birthday) = 2000; -- 失效! 
-- 改写为范围查询 
SELECT * FROM user WHERE birthday BETWEEN '2000-01-01' AND '2000-12-31'; 

场景3:最左前缀原则——组合索引的命门
索引idx(name, age):

SELECT * FROM user WHERE age = 20; -- 失效,没带头大哥name 
SELECT * FROM user WHERE name LIKE '王%' AND age = 20; -- 有效 

场景4:OR连接非索引字段

-- age有索引,address无索引 
SELECT * FROM user WHERE age = 20 OR address = '北京'; -- 全表扫描! 
-- 优化方案:拆成UNION 
SELECT * FROM user WHERE age = 20  
UNION  
SELECT * FROM user WHERE address = '北京'; 

场景5:!= 或 <> 操作符

SELECT * FROM user WHERE status != 1; -- 即使status有索引也失效 
-- 改写方案: 
SELECT * FROM user WHERE status IN (0,2,3); -- 注意区分度 

场景6:LIKE以通配符开头

SELECT * FROM user WHERE name LIKE '%小明%'; -- 全表扫 
-- 必须左边%怎么办?考虑全文索引或ES 

三、慢SQL优化三板斧

1. 重写SQL语句

3. 参数调优——针对高并发场景

  • **消灭SELECT ***:只查需要的字段,特别是TEXT/BLOB类型。

  • 子查询转JOIN:

    -- 慢查询 
    SELECT * FROM orders WHERE user_id IN (SELECT id FROM user WHERE age > 18); 
    -- 优化后 
    SELECT o.* FROM orders o JOIN user u ON o.user_id = u.id WHERE u.age > 18; 

    分页优化:

    -- 深度分页卡死 
    SELECT * FROM user LIMIT 1000000, 10; 
    -- 优化方案:记录上一页最大ID 
    SELECT * FROM user WHERE id > 1000000 LIMIT 10; 

    2. 索引设计黄金法则

  • 单表索引不超过5个

  • 优先考虑区分度高的字段(比如手机号 > 性别)

  • 避免冗余索引,比如已有(a,b),再建(a)就是多余

# my.cnf 核心参数 
join_buffer_size = 256M  # 关联查询缓存 
sort_buffer_size = 256M  # 排序缓存 
innodb_buffer_pool_size = 物理内存的70%  # 缓存数据和索引 

四、防患于未然——长效机制

  • 每周定时检查慢查询日志,重点关注执行时间突增的SQL。

  • 关键业务表增加监控:扫描行数、锁等待时间、索引使用率。

  • 新功能上线前,强制EXPLAIN审核。

  • 定期清理无用索引:用sys.schema_unused_indexes视图(MySQL 5.7+)。

结语:SQL优化是个持续的过程,别指望一劳永逸。遇到性能问题,冷静分析执行计划,先确认索引是否有效,再考虑重写SQL。如果这篇文章帮你解决了问题,欢迎关注我的优快云,后续继续手撕各种数据库疑难杂症!

    MySQL索引底层原理:从图书馆找书到B+Tree与InnoDB页结构 数据库索引是提升查询性能的核心机制,其本质是通过有序数据结构减少磁盘IO次数。B+Tree作为MySQL InnoDB默认索引结构,以‘矮胖’形态优化树高,显著降低范围查询和排序操作的IO开销;而InnoDB页结构(如Page Directory、Infimum/Supremum、n_owned字段)则在物理层面保障高并发写入下的稳定性与局部性。理解索引失效(如LIKE '%abc')、回表代价、页分裂逻辑等现象,需回归到B+Tree的搜索路径与页内数据组织方式。本文结合生活类比与生产故障复现,深入解析索引 阅读详情

    相关推荐

    技术人个人品牌重构:从‘如何帮您’到可验证价值交付

    在信息过载时代,技术从业者构建个人影响力的核心障碍,不是能力不足,而是价值表达失焦——模糊的身份标签、宽泛的‘帮助’承诺、缺失的问题锚点,导致用户无法建立信任与决策依据。本文基于服务型技术品牌建设原理,解析如何将主观能力转化为客观可测的交付结果,强调用真实问题切片、业务导向的结果刻度、细分领域身份标签和最小可行性交付物,构建高转化专业表达体系。适用于技术博客运营、知识付费、自由职业及B端咨询等场景,尤其解决‘能力强却难获信任’的普遍困境。

    a6t2007的博客 449

    MySQL慢查询及解决方案

    MySQL慢查询与索引的关系,以及慢查询问题解决的方案

    程序大视界 7922

    CentOS 8部署MariaDB实战:避坑指南与等保/RAGFlow适配

    MariaDB作为MySQL的高性能分支,是Linux服务器数据库选型的核心选项之一;其在CentOS 8环境中的部署并非简单执行dnf install,而需深入理解模块流(module stream)、AppStream仓库机制及systemd服务生命周期管理。CentOS 8已EOL,当前主流为CentOS Stream 8,二者在mariadb默认版本、启用策略和依赖解析上存在本质差异,直接决定安装成功率。技术价值在于保障服务稳定性、满足等保三级对SSL强制传输、审计日志、密码策略等硬性要求,并支撑R

    weixin_30421809的博客 393

    【性能测试】MySQL慢查询原因/排查思路+SQL优化与性能定位思路...

    Mysql慢查询现象、原因、排查思路1、MySQL慢查询表现1)TPS很低2)相应时间很长3)应用服务器CPU使用率很低4)MySQL数据库服务器使用率很高2、MySQL慢查询原因1)数据未加索引2)数据库索引未生效3)SQL语句不够优化3、Mysql慢查询问题排查思路1)检查是否添加索引2)找到接口中所有的sql语句和where语句3)找到执行比较慢的sql语句4)对慢查询sql语句执行计划分析SQL语句优化1)在where及order by后的字段,添加索引。避免全表扫描。

    大佬云集技术答疑交流群:743262921(进群暗号:222) 1万+

    数据科学能力成熟度:拆解技术、业务与协作三维成长模型

    数据科学能力并非单纯由编程熟练度或算法掌握量决定,而是一个融合技术纵深、业务穿透与协作杠杆的动态系统。其核心原理在于:有效能力积累依赖刻意练习而非时间堆砌,需在真实业务约束中完成‘问题定义—方案设计—效果归因’闭环;技术价值体现在对业务指标的可解释影响(如AUC提升如何折算为坏账减少),而非模型本身复杂度;应用场景覆盖从初级需求翻译到高级跨职能决策主导。本文基于142份晋升材料与89次职业对话提炼出可诊断、可干预的能力结构模型,聚焦数据科学家最常卡点的‘似懂非懂’‘技术业务两张皮’‘支持角色困境’等现实难题

    tomfish 383

    12个实战派YouTube频道:数据科学从入门到交付的免费学习引擎

    数据科学不是公式堆砌,而是数学直觉、工程实践、业务翻译与系统交付四维能力的协同演进。理解梯度下降的几何意义比推导更关键,掌握Pandas的`.copy()`陷阱比熟记语法更能避免线上事故。真实项目节奏、版本强同步与问题反馈闭环,构成YouTube技术学习不可替代的核心价值。这些免费资源不替代系统训练,却能精准击穿新手在SQL性能优化、模型上线卡点、Python工程化写法等高频断层。面向转行者、初级工程师与中小团队技术负责人,本文聚焦可验证、可迁移、可交付的学习路径,让每一次视频观看都导向真实业务问题的解决。

    weixin_34327223的博客 866

    【MySQL】数据库排查慢查询、死锁进程排查、预防以及解决方法

    数据库排查慢查询、死锁进程排查、预防以及解决方法

    真的好想再回到那时,可现在能做的只有补救。————个人博客:https://w7h1te.github.io/ 6039

    豆包、千问、Kimi、DeepSeek四款AI助手深度对比选型指南

    AI助手作为当前最普及的大模型落地形态,其核心能力围绕中文理解、长文本处理与本地交互三大基础技术维度展开。中文理解深度决定回答是否符合语境与逻辑,长文本处理能力支撑合同解析、论文研读等专业场景,而本地使用友好度则关系到隐私安全、离线可用性与文件上传稳定性。在实际工程应用中,不同模型因训练目标、技术底座与产品定位差异,形成显著能力分野:如Kimi专注长上下文鲁棒性,DeepSeek强化代码级逻辑推理,千问侧重结构化政务法律文本输出,豆包深耕多模态生活化语义交互。本文基于27个真实工作流实测,揭示各款App在法

    weixin_34348805的博客 605

    mysql查询缓慢原因和解决方案

    查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化 可以通过如下方法来优化查询 : 1、把数据

    忘川 1万+

    程序员侠客梦:从单机剑客到AI铸剑师的技术主权演化史

    在软件工程发展进程中,‘技术自主权’与‘问题终结权’始终是驱动开发者深度投入的核心动力。本文从操作系统权限、中间件治理、可观测性主权等基础概念切入,解析分布式系统与云原生架构如何重构工程师的技术影响力边界;结合提示工程、数据飞轮、人机协同工作流等AI原生实践,揭示‘解题能力’向‘铸剑能力’跃迁的底层原理。其技术价值在于帮助个体识别职业阶段中的权力迁移节点,支撑高可用系统设计、稳定性保障及AI增强型研发体系构建。适用于云原生平台工程师、SRE、技术决策者及希望持续进化的资深开发者。

    diaojin6880的博客 493

    MongoDB实战指南:文档数据库原理与生产级应用

    文档数据库是一种以JSON/BSON格式存储数据的非关系型数据库,其核心在于灵活的无模式设计与嵌套文档结构,解决了传统SQL在动态字段、高嵌套、频繁Schema变更场景下的性能瓶颈。基于BSON二进制序列化、分布式ObjectId主键、集合级分片等底层机制,MongoDB在IoT遥测、实时日志、多语言内容管理等读多写少、结构多变的业务中展现出显著优势。本文结合无人机赛事真实数据集,详解从环境搭建、MQL查询优化、聚合管道到索引调优、时区处理、安全配置等全链路生产实践,覆盖Python/pymongo驱动、D

    weixin_34318326的博客 374

    AI编程实战:从自然语言到生产级代码的五步闭环

    自然语言编程(NLP)正推动软件开发进入Software 3.0时代,其核心并非替代开发者,而是通过人机协同实现意图精准表达与工程化落地。其技术原理依赖大语言模型对代码语义的理解能力、上下文感知机制及结构化输出控制,技术价值在于压缩反馈循环、降低认知负荷、加速知识复用。典型应用场景覆盖数据库SQL优化、微服务依赖分析、前端原子化生成与CI/CD集成验证等工程实践环节。本文聚焦‘角色定义-上下文注入-格式契约-任务分解-系统验证’五步实操闭环,结合PostgreSQL索引优化等真实案例,详解如何将AI从聊天工

    weixin_30571465的博客 444

    GenAI增强的轻量NLP系统:社交媒体真实语境理解实战

    社交媒体文本分析是自然语言处理(NLP)在真实场景中的关键落地方向,其核心挑战在于非规范表达、跨平台语义漂移与毫秒级响应要求。传统微调BERT等模型常因训练数据脱离实际而失效,而端到端大模型又面临延迟高、不可解释、部署重等瓶颈。GenAI在此并非替代NLP系统,而是作为语义增强层,精准解决谐音梗还原、多模态语境补全和跨平台行为对齐三大断点;结合Qwen-1.5B等轻量基座模型与LoRA微调、4-bit量化等工程优化,实现高准确率、低延迟、强可解释的工业级落地。本实践聚焦微博、小红书、抖音等平台的真实评论流处

    weixin_30243533的博客 331

    MySQL数据库慢查询问题排查方法

    最近碰到了几次数据库响应变慢的问题,整理了一下处理的流程和分析思路,执行脚本。希望对其他人有帮助。 MySQL慢查询表现 明显感觉到大部分的应用功能都变慢,但也不是完全不能工作,等待比较长的时间还是有响应的。但是整个系统看起来就非常的卡。 查询慢查询数量 一般来说一个正常运行的MySQL服务器,每分钟的慢查询在个位数是正常的,偶尔飙升到两位数也不是不能接受,接近100系统可能就有问题了,但是还能勉...

    意言堂-技术管理杂谈 9953

    2026企业AI编程三大核心工具选型与落地指南

    AI编程已从开发者辅助工具演进为可审计、可嵌入、可收敛的企业级工程能力。其底层原理在于将代码生成与工程规范、上下文图谱、多模态知识图谱深度耦合,技术价值体现在提升交付确定性、降低合规风险、加速遗留系统现代化。典型应用场景包括CI/CD质量守门、跨团队API协同开发、混合云故障根因分析及等保合规自动化审查。本文聚焦TRAE、GitHub Copilot、Amazon Q Developer三大2026年产线验证工具,解析其在可审计性、上下文感知、系统级理解维度的差异化定位与集成实践。

    719

    基于STM32 HAL库的L298N四驱电机PWM调速与方向控制实战

    本文详细介绍了基于STM32 HAL库驱动L298N电机控制板实现四驱小车PWM调速与方向控制的实战方法。涵盖硬件连接、GPIO与定时器配置、PWM生成、方向控制逻辑及电源管理等核心内容,并提供代码优化与常见问题解决方案,帮助开发者快速实现高效稳定的电机控制。

    jump7的博客 222

    Mysql之慢查询的排查及其优化

    我们查询比较慢的sql我们一定要将其记录下来 记录我们执行的sql 这样们在排查的时候才可以记录下来,那么我们可以打开我们的mysql慢查询日志,在这个日志里会记录下我们慢查询的sql 当然这个慢查询日志中的慢查询是有限定时间的,我们可以更改限定时间找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。

    qq_48508278的博客 6808

    ArcGIS实战:用栅格数据为偏远山区规划一条最省钱的公路(附完整数据与操作步骤)

    本文详细介绍了如何利用ArcGIS进行栅格数据分析,为偏远山区规划一条最省钱的公路。通过DEM高程数据处理、成本权重设定和最佳路径计算,结合真实案例展示了从数据准备到工程方案转化的完整流程,帮助工程师在复杂地形中做出经济高效的路线决策。

    weixin_32136203的博客 358

    挖一挖那些让公司网站瘫痪的SQL“终结者”

    IT实战联盟博客:http://blog.100boot.cn 一条慢查询会造成什么后果?之前我一直觉得不就是返回数据会慢一些么,用户体验变差? 其实远远不止,我经历过几次线上事故,有一次就是由一条 SQL 慢查询导致的。 那次是一条 SQL 查询耗时达到 2-3 秒「没有命中索引,导致全表扫描」,由于是高频查询,并发一起来很快就把 DB 线程池打满了,导致大量查询请求堆积,DB 服务器 CPU 长时间 100%+,大量请求 timeout... 最终系统崩溃,老板登场!可见,团队如果对慢查询不引起

    zhenghhgz的博客 604

    E5071C 网络分析仪使用指南

    E5071C 网络分析仪是 Keysight(原 Agilent)推出的一款高性能矢量网络分析仪,广泛应用于射频(RF)和微波(MW)电路设计、天线测试、滤波器优化等领域。它以高精度、宽频率范围(9 kHz–20 GHz)、出色的动态范围和灵活的测量功能著称。本文将详细介绍 E5071C 的基本操作方法,帮助用户快速上手并高效使用该设备。

    2501_90901792的博客 4191

    实战复盘:如何用Frida脚本绕过某书APP的libmsaoaidsec.so检测(附完整Hook代码)

    本文深入探讨了如何利用Frida脚本绕过某书APP通过libmsaoaidsec.so实现的反Frida检测机制。通过分析动态链接过程中的关键节点和检测模式,提供了两种实战验证的绕过方案:动态Hook关键链接器函数和静态Patch SO文件。文章还分享了进阶对抗策略和调试技巧,帮助安全研究人员有效应对现代移动安全防护挑战。

    weixin_42706667的博客 220

    服务化-mysql-07 实战分析mysql慢查询

    mysql慢查询语句详细分析

    csfun1的博客 6684

    Swin Transformer 类可视化(grad CAM)

    完整代码 from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM from pytorch_grad_cam.utils.image import show_cam_on_image from torchvision.models import resnet50 import glob from demo import parse_option from models i

    G果的博客 6640
    上一篇: MySQL建表到底要不要加外键?血泪教训总结
    下一篇: 全网最硬核的MySQL索引解析!SHOW INDEX FROM 每个字段都给你说明白!
    码里看花‌
    博客等级 码龄8年 321粉丝 68原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符  | 博主筛选后可见
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    码里看花‌

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值