sublime text 需配合正则与多光标手动提取慢查询sql:先用正则筛选query_time≥0.5s的行,再用列选+多光标批量删除日志前缀,最后清理控制符、验证语法并explain测试。

Sublime Text 本身不解析日志,但配合正则和多光标,几秒内就能从慢查询日志里揪出目标 SQL —— 关键是别指望它自动识别“哪条慢”,得你告诉它找什么。
用正则快速筛选耗时 SQL
MySQL 慢查询日志不是标准 SQL 文件,而是混合了时间、统计、SQL 语句的文本。直接 Ctrl+F 找 SELECT 没用,可能匹配到注释或日志头。必须用正则锚定执行时间字段。
- 打开日志文件后,按
Ctrl+H(Windows/Linux)调出替换面板,勾选.*(正则模式) - 搜索:
query_time: ([0-9]+\.[0-9]{4,}|[1-9][0-9]*\.[5-9])—— 这能抓到 ≥ 0.5s 或 ≥ 1.5s 的语句(比单纯写query_time: [0-9]+\.5更准,避免漏掉2.0001) - 点击
Find All,所有匹配行高亮,光标自动停在每条query_time:开头处 - 接着按
Ctrl+Shift+L(Split into Lines),再按Ctrl+↑/↓向上或向下扩展选择,直到选中整条 SQL(通常从# Query_time下一行开始,到下一个# Time或空行结束)
用列选 + 多光标批量提取 SQL 片段
日志里每条 SQL 前都有固定前缀(如 # User@Host:、# Query_time:、# Lock_time:),手动删太慢。列选模式才是批量清理的主力。
- 把光标放在第一条 SQL 的第一个字符上(通常是
S或I),按住Alt(Windows/Linux)或Cmd(Mac),鼠标拖动向下,框出所有 SQL 起始位置 —— 此时出现多个竖直光标 - 按
Home回到行首,再按住Shift+→选中前面所有日志头(比如从行首到第一个空格),按Delete - 如果还有多余换行或空行,用
Ctrl+Shift+P→ 输入Join Lines一键合并(前提是每条 SQL 已单独成段) - 注意:列选范围必须严格对齐,否则会误删中间内容;建议先
Ctrl+Shift+P→Toggle Distraction Free关掉侧边栏,视野更稳
复制后立刻验证是否为完整可执行 SQL
日志里的 SQL 经常被截断(... 1000 more lines)、含隐藏控制符、或缺分号。直接扔进 MySQL 客户端会报错,得提前清理。
- 粘贴到新
.sql文件后,右下角手动切换语法为SQL (MySQL),看关键字是否高亮 —— 如果SELECT是白的,说明开头有不可见字符(常见于日志转存时的 BOM 或 \r\n 混用) - 用正则替换清除杂项:
^#.*$(删所有以 # 开头的注释行)、\s*;\s*$(删末尾多余分号)、\x00-\x08\x0B\x0C\x0E-\x1F(删控制字符,需开启正则的\x模式) - 检查是否有未闭合引号或括号:用
Ctrl+Shift+P→BracketHighlighter: Select Scope(需装 BracketHighlighter 插件),光标停在任一引号或括号上,看是否能正确高亮配对 - 别跳过
EXPLAIN验证:复制清理后的 SQL,在新文件里加EXPLAIN前缀,再Ctrl+B执行 —— 如果输出是表格结构而非错误,基本说明语法完整
真正卡住人的从来不是正则怎么写,而是日志里 SQL 实际位置不规律:有的跨多行,有的被注释隔开,有的混着 SET timestamp=。每次提取前先花 3 秒扫一眼上下文模式,比盲目跑正则快得多。











