Planora - 可视化的SQL执行分析工具
SQL优化可以说是技术圈的常客, 面试官的利刃 面试者的软肋
但在日常开发中, 先不说如何根据执行计划去做SQL优化, 光是看执行计划(Explain) 我觉得就挺难读的 ^_^
一. 为什么执行计划看起来就让人头大
当线上出现慢查询需要优化, 第一反应也基本都是去看看执行计划.
但现实往往是, 对着一堆的id, select_type, type, rows的表格陷入了沉思...
1.1 阅读上的视觉负担
传统的执行计划以表格或JSON呈现,信息密集度极高, 缺缺乏逻辑中心.
一眼都看不到头, 更别说一眼看出哪一步是瓶颈.
尤其是当 rows 很大或者 Extra 里面堆满了 Using temporary; Using filesort时.
1.2 多表关联(JOIN)的迷宫
在处理3张或者更多的表的复杂关联时, 表格形式几乎失效了.
是如何嵌套循环的? 驱动表是什么? 连接顺序是否符合预期? 在多达数十行的表格里, 逻辑层级被完全打乱.
开发者需要极强的能力才能脑中或者笔下勾勒出具体的路径.
1.3 看懂不代表能 "决策"
普通开发者能看懂ALL代表全表扫描, 但是对 Index Condition Pushdown或者复杂子查询的执行过程很难直接判断: 我应该加哪个索引? 还是应该加过滤条件? 或者改写SQL逻辑?
二. 我周围的人是如何看执行计划的
2.1 终端/客户端直出
直接在Navicate 或者 Datagrip中执行Explain, 对表格人肉解析.
2.2 JSON 格式查看
使用 EXPLAIN FORMAT=JSON,虽然信息更全,但几百行的 JSON 源码看久了真的会“工伤”。
2.3 Visual Explain
某些重量级 IDE 自带可视化,但往往由于集成度太高、UI 过于笨重,或者无法脱离特定环境,导致使用频率并不高。
2.4 不会看 & 看不懂
一大部分的开发者是看不懂执行计划的, 是一点都看不懂. 甚至是不知道怎么查询执行计划.
这并不一定是个人能力问题, 更大概率是他根本没有这个需求.
三. 我的一个尝试
基于上面的种种原因, 我开发了查询分析工具 - Planora 它的核心目标很简单: 将执行计划变得更直观, 可直接参考和决策
3.1 核心功能
3.1.1 Join Tree(执行结构可视化)
直观的看到表的 join 关系和执行顺序, 数据是如何从一张表流向另一张表, 驱动顺序一目了然.
3.1.2 Diagnostics 识别
Planora会根据执行计划的权重(预估扫描行数, 是否索引查询, 子查询开销等) 将问题分为不同级别, 通过视觉色彩提醒你那里是真正的"重灾区"
3.1.3 风险评估
对SQL进行整体的风险评估, 以最直观的让你看到这个SQL在线上执行, 是否会带来可怕的后果. 并且能让你看到里面每一个分数的由来.
3.1.4 索引建议
根据 WHERE / ORDER BY / GROUP BY 等条件结合表的基本信息来给出具体的索引建议. 可直接拷贝执行.
四. 期待大家的使用和反馈
目前Planora处于起步阶段, 我还在奋力的迭代,修复,测试中. 大家可以尝试使用并提供各种宝贵意见, 不管是关于产品本身的建议,还是发现的bug或问题, 都欢迎在文章中评论,或联系我或在Github中提交issue
当前仅发布了 VSCode 拓展程序 支持MySQL数据库. 其他的数据库和更多平台和功能还在进行中...
4.1 VSCode Marketplace:
marketplace.visualstudio.com/items?itemN…