MySQL Slow Query Analyzer — MySQL Slow 查询 分析器
v1.2.0帮助开发者解析MySQL EXPLAIN和慢查询日志,定位性能瓶颈,生成索引与SQL重写优化建议,提升查询效率。
运行时依赖
安装命令
点击复制技能文档
MySQL Slow 查询 分析器 / MySQL慢查询分析与优化 身份与目标
你是 MySQL Performance Expert,专门帮助开发者定位和优化 MySQL 慢查询。
触发词 "慢查询" "mysql explAIn" "分析慢查询" "slow 查询" "查询优化" "mysql 优化建议" "索引建议" "explAIn analyze" "慢查询日志" 痛点 慢查询难定位:生产环境慢查询日志动辄数万行,人工分析耗时耗力 EXPLAIN 难读懂:EXPLAIN 输出字段多(15+字段),新手难以判断性能问题 索引滥用:不知道该在哪些列上建索引,或者建了索引却不走 重写困难:知道问题但不知道怎么重写 SQL,ORDER BY + GROUP BY 组合让人头疼 场景 场景1:开发自测 开发阶段发现某个接口响应慢,直接把 SQL 发给技能分析 → 立即知道走没走索引、成本多少、需要什么优化
场景2:上线前评审 DBA 或同事 review SQL,粘贴 EXPLAIN 输出 → 自动生成优化建议(索引/重写/配置调整)
场景3:慢查询日志分析 从生产环境拉取 slow_查询_记录,粘贴给技能 → 自动识别最慢的 TOP N 查询,逐一给出优化方案
场景4:数据库性能排查 数据库 CPU/IO 突然飙升,怀疑有烂 SQL → 通过 slow 查询 记录 快速定位元凶
核心功能
- MySQL EXPLAIN 解析(支持 JSON / TAB / Traditional 格式)
- 慢查询日志分析
- 索引建议生成
输出格式: - 建议创建的索引(DROP / 添加) - 覆盖索引建议(Using 索引) - 前缀索引建议(长字符串列)
- SQL 重写建议
- 性能指标计算
输出格式示例 EXPLAIN 分析结果 📊 MySQL EXPLAIN 分析报告
🎯 查询成本: 12450.35 📦 扫描行数: 50,000 📨 返回行数: 100 ⚡ 扫描效率: 500:1 (较差,每500行才返回1行)
🔍 执行计划: - 类型: ALL (全表扫描) ⚠️ - 索引: NULL - 键: NULL - 行长度: 256 - Extra: Using file排序 ⚠️
⚠️ 性能问题: - 🔴 全表扫描,50,000行数据全部扫描 - 🔴 Using file排序,ORDER BY 未走索引 - 🟡 隐式类型转换:状态 = '1' (字符串 vs 数字)
💡 优化建议: 1. 🔧 在 orders.状态 列建立索引 2. 🔧 在 orders(创建d_at, 状态) 建立联合索引消除 file排序 3. 🔧 将 状态 = '1' 改为 状态 = 1 避免类型转换 4. 🔧 用 EXPLAIN 格式化=JSON 查看真实成本
慢查询日志分析 🐌 慢查询分析
⏱️ 查询时间: 5.23s (🔴 CRITICAL > 5s) 🔒 锁等待: 0.09ms 📊 扫描行数: 500,000 📨 返回行数: 100 📈 效率比: 5000:1 (极差)
💡 优化建议: 1. 🔧 orders.状态 列缺少索引 → 添加 索引 idx_状态 (状态) 2. 🔧 查询返回100行却扫描50万行 → 检查是否有合适索引 3. 🔧 考虑在 状态 + 创建d_at 上建立联合索引
定价 Free: 10次/天(EXPLAIN 解析) Pro (¥19/月): 100次/天 + 慢查询日志分析 + 历史记录 Team (¥49/月): 无限制 + 批量分析 + 导出报告 + 团队共享 技术实现 Python 3.10+ 标准库为主,无外部依赖(纯正则 + 内置解析) 支持格式: MySQL EXPLAIN (JSON / TAB / Traditional) + slow 查询 记录 架构: 单文件 < 500行,命令行工具 独立入口 纯本地运行: 不需要网络,不上传任何数据 限制 不支持存储过程、触发器的 EXPLAIN 不支持复杂多语句事务分析 索引建议基于启发式规则,不保证最优 使用示例 Python API from mysql_slow_查询_分析器 导入 ( 解析_explAIn_json, 解析_explAIn_text, 解析_slow_查询_记录, 生成_索引_suggestions, 生成_rewrite_suggestions, analyze_slow_查询, )
# 解析 EXPLAIN JSON explAIn_json = '{"查询_block": {"select_id": 1, "cost_信息": {"查询_cost": "12450.35"}, ...}}' 报告 = 解析_explAIn_json(explAIn_json) print(报告)
# 解析慢查询日志 记录_entry = """ # Time: 2024-01-01T10:00:00.123456Z # 查询_time: 5.234193 Lock_time: 0.000089 Rows_sent: 100 Rows_examined: 500000 SELECT FROM orders WHERE 状态 = 1; """ 报告 = 解析_slow_查询_记录(记录_entry) print(报告)
# 生成索引建议 sql = "SELECT FROM orders WHERE 状态 = 1 AND 创建d_at > '2024-01-01'" suggestions = 生成_索引_suggestions(sql) print(suggestions)
# 完整分析 报告 = analyze_slow_查询(sql) print(报告)
命令行工具 # 解析 EXPLAIN JSON python mysql_slow_查询_分析器.py explAIn-json ''
# 解析 EXPLAIN TEXT python mysql_slow_查询_分析器.py explAIn-text ''
# 分析慢查询日志 python mysql_slow_查询_分析器.py slow记录 '<记录_ENTRY>'
# 生成索引建议 python mysql_slow_查询_分析器.py 索引-advice ''
# SQL 重写建议 python mysql_slow_查询_分析器.py rewrite ''
# 完整分析(输入 SQL,自动 EXPLAIN 解析 + 建议) python mysql_slow_查询_分析器.py analyze ''