← ClaudeAtlas

sql-explain-zhlisted

解读慢查询的 EXPLAIN 输出,给中文优化建议(索引/扫描行数/回表/filesort/临时表)。当用户说「EXPLAIN 帮我看下/这个查询好慢/SQL 优化/慢查询分析/explain 结果看不懂」时触发。
YuAICode/ai-skills · ★ 1 · AI & Automation · score 74
Install: claude install-skill YuAICode/ai-skills
# sql-explain-zh — EXPLAIN 中文解读 + 优化建议 把 MySQL `EXPLAIN` 输出收敛成"每行的中文含义 + 具体能做什么优化",不用再对着英文文档猜。 ## 何时触发 - 用户说"帮我看下这个 EXPLAIN"、"这个 SQL 好慢"、"慢查询优化"、"explain 结果看不懂" - 用户粘贴了 `EXPLAIN` 输出(含 id/select_type/table/type/key/rows/Extra 等列) - 用户想知道某个 SQL 会不会走索引、会不会全表扫描 ## 用法 ### 方式 A:有 MySQL 连接 — 用脚本跑 EXPLAIN ```bash # 设置连接环境变量(标准 MYSQL_* 变量) export MYSQL_HOST=127.0.0.1 export MYSQL_PORT=3306 export MYSQL_USER=root export MYSQL_PASSWORD=secret export MYSQL_DATABASE=mydb # 跑 EXPLAIN(SQL 作参数) bash <skill>/bin/explain.sh "SELECT * FROM orders WHERE user_id = 1" # 或从 stdin 传 SQL echo "SELECT * FROM orders WHERE user_id = 1" | bash <skill>/bin/explain.sh ``` 脚本输出 `EXPLAIN` 结果后,把输出粘给 Claude 解读。 ### 方式 B:无 MySQL 连接(或只有 EXPLAIN 结果) 直接把 EXPLAIN 结果粘给 Claude,说"帮我解读这个 EXPLAIN"即可。无需脚本。 ### 流程 1. **拿到 EXPLAIN 结果**:用户粘贴 或 `bin/explain.sh` 跑出来。 2. **逐行解读**:Claude 对每个 EXPLAIN 行逐列分析(见解读模板)。 3. **给出中文优化建议**:该加什么索引、为什么慢、能否避免回表/filesort/临时表。 4. **如有缺口就问**:缺少表结构/索引定义/数据量时,明确告诉用户需要哪些信息。 ## 解读模板 ```markdown ## EXPLAIN 解读 ### 查询概览 (一句话:这是什么查询、预期扫哪几张表、关联逻辑) ### 逐行分析 | 行 | table | type | key | rows | Extra | 风险 | |----|-------|------|-----|------|-------|------| | 1 | orders | ALL | NULL | 500000 | Using filesort | 🔴 全表扫描 + filesort | | 2 | users | eq_ref | PRIMARY | 1 | — | ✅ 主键等值 | **各列说明:** - **type**(访问类型,从优到劣): `system` > `const` > `eq_ref` > `ref` > `range` > `index` > `ALL` - `ALL`:全表扫描,**最差**,rows 大时必须加索引。 - `index`:索引全扫,比 ALL 好但仍可能慢。 - `range`:索引范围扫描,`WHERE id BETWEEN 1 AND