资讯动态

mysql数据库响应缓慢如何排查_使用EXPLAIN分析执行计划

发布时间:2026/8/26 2:16:20 来源:尧图企业网站定制
type为ALL表示全表扫描说明MySQL未使用索引若rows接近总行数且Extra含Using where但无Using index则索引失效。应检查WHERE字段是否建索引、遵循联合索引最左匹配、确保类型一致、避免索引列上函数操作。EXPLAIN 显示 type 是 ALL说明在全表扫描这是最常见也最危险的信号MySQL 没走索引每查一次就扫一遍整张表。尤其当 rows 值接近表总行数且 Extra 里出现 Using where但没 Using index基本可以断定索引失效。实操建议检查 WHERE 条件字段是否建了索引注意联合索引的最左匹配原则——INDEX(a, b, c) 能用上 a ? 或 a ? AND b ?但对 b ? 无效确认字段类型和查询值类型一致比如 user_id 是 BIGINT但写成 WHERE user_id 123字符串会触发隐式转换索引失效避免在索引列上做函数操作WHERE YEAR(create_time) 2024 不会走 create_time 索引改用 create_time 2024-01-01 AND create_time EXPLAIN 的 key 为空但明明建了索引索引存在 ≠ 查询会用。MySQL 优化器可能认为走索引比全表扫描更慢比如返回结果占表 20% 以上于是主动放弃索引。实操建议用 ANALYZE TABLE table_name 更新统计信息让优化器重估成本加 FORCE INDEX 强制走某索引慎用SELECT * FROM orders FORCE INDEX (idx_user_status) WHERE user_id 123 AND status paid检查索引选择性如果 status 只有 paid/pending/failed 三个值这个字段单独建索引意义极小更适合放在联合索引后位EXPLAIN 中 Extra 出现 Using filesort 或 Using temporary这不是错误但意味着排序或分组没走索引MySQL 得额外分配内存或磁盘临时表性能损耗明显。尤其是 ORDER BY 和 GROUP BY 字段没被索引覆盖时高频出现。 MacsMind 电商AI超级智能客服

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价