打开浏览器,粘贴一段SQL,就能看到SQLite的查询计划被翻译成中文——不用记命令行参数,也不用啃官方文档。这是Simon Willison在2026年7月18日发布的新工具SQLite Query Explainer要解决的问题,地址在tools.simonwillison.net/sqlite-query-explainer。
工具用Python、Pyodide和WebAssembly,把整个SQLite搬进浏览器运行。它没有改动SQLite本身,只是给EXPLAIN QUERY PLAN和EXPLAIN这两条老命令的输出,加了一层逐行注释。连作者本人都承认自己没把握验证这些解释是否准确——这句话决定了它的定位:适合学习,不适合给生产数据库下诊断书。
两层输出,两种问题
这个工具同时跑两条诊断命令,回答的是两个不同层面的问题。
| 命令 | 输出内容 | 能回答什么 | 不能回答什么 |
|---|---|---|---|
| EXPLAIN QUERY PLAN | 优化器选定的高层策略 | 用了哪个索引、是否全表扫描 | 实际耗时、实际磁盘IO次数 |
| EXPLAIN | 虚拟机逐条字节码指令 | 每一步具体执行什么操作 | 真实运行时性能 |
这里有个容易误会的点:EXPLAIN看到的不是SQLite真的在硬盘和内存里做了什么,而是它打算怎么做。这是查询计划和字节码程序,不是性能采样。想知道真实耗时,得靠.timer on或者专门的性能分析工具,这个网页工具不做这件事。
工具本身没有新造轮子,新的只是那层人话注释。命令行敲EXPLAIN QUERY PLAN本来就能看到同样的原始输出,只是没人给你逐行解释。这个想法源自程序员Julia Evans前一天写的博客,她在文中感叹自己“也许有一天能学会读查询计划”。Willison看到后,让常用的AI编程工具Fable把这个念头做成了产品。
浏览器演示和生产数据库,差在哪
EXPLAIN的输出会随SQLite版本、编译选项、表的统计信息、数据量和索引配置变化。同一条查询换个环境,可能得到完全不同的执行计划。
浏览器里跑的Pyodide版SQLite,未必和生产环境用的SQLite同一个版本、同一套编译配置。Willison在发布文字里明确留了退路:他对SQLite查询计划的了解不足以验证这些结果,只说“看起来还算靠谱”。这句免责声明比工具本身更值得记住。
谁该用,谁该再等等
正在学SQLite内部机制的人,可以拿这个工具练手,弄清楚“扫描”“索引”“临时排序”这些术语具体对应哪一步操作,比对着命令行原始输出啃文档快。
排查线上慢查询的开发者,不建议照着浏览器里的解释直接改生产索引。稳妥做法是在真实数据库、真实数据量、和线上一致的SQLite版本上重新跑一遍EXPLAIN QUERY PLAN,拿那份结果说话。
接下来值得盯的,是有没有人拿真实查询案例去对照这个工具的解释和SQLite官方文档,看看逐行注释的准确率到底怎么样。目前这一点还看不清。
