在MySQL中,三个百万级大表进行 JOIN 查询导致 CPU 飙升,这是一个非常典型的性能瓶颈问题。CPU 飙升通常是因为大量的数据在内存中进行嵌套循环比对(Nested Loop Join)、排序(Sorting)或创建临时表(Temporary Tables)。 作为一个有经验的开发者或DBA,我会按照 “定位 -> SQL与索引优化 -> 数据库配置 -> 架构与业务调整” 的层级递进顺序来解决这个问题。 以下是具体的排查和优化步骤: --- 第一步:紧急干预与问题定位(止血) 1. 找出并终止元凶: 立即通过 找出状态为 、 或 且执行时间过长的查询。 如果已经影响到核心生产业务,果断使用 杀掉该查询,先恢复数据库响应。 2. 获取执行计划(核心动作): 拿到该 SQL,使用 (或者 MySQL 8.0 的 )查看执行计划。 重点关注: 列:是否存在 (全表扫描)或 (全索引扫描)。 列:预估扫描的行数是不是百万级。 列:是否出现 、(使用了临时表)、(文件排序)。 --- 第二步:SQL 与索引优化(最常见且最有效的手段) 通常 CPU 飙升是因为缺少合适的索引,导致...