别再硬看MySQL Explain! 我把它做成了可视化

0 阅读3分钟

Planora - 可视化的SQL执行分析工具

planora_demo_new.png

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(执行结构可视化)

image.png

直观的看到表的 join 关系和执行顺序, 数据是如何从一张表流向另一张表, 驱动顺序一目了然.

3.1.2 Diagnostics 识别

image.png Planora会根据执行计划的权重(预估扫描行数, 是否索引查询, 子查询开销等) 将问题分为不同级别, 通过视觉色彩提醒你那里是真正的"重灾区"

3.1.3 风险评估

image.png

对SQL进行整体的风险评估, 以最直观的让你看到这个SQL在线上执行, 是否会带来可怕的后果. 并且能让你看到里面每一个分数的由来.

3.1.4 索引建议

image.png

根据 WHERE / ORDER BY / GROUP BY 等条件结合表的基本信息来给出具体的索引建议. 可直接拷贝执行.


四. 期待大家的使用和反馈

目前Planora处于起步阶段, 我还在奋力的迭代,修复,测试中. 大家可以尝试使用并提供各种宝贵意见, 不管是关于产品本身的建议,还是发现的bug或问题, 都欢迎在文章中评论,或联系我或在Github中提交issue


当前仅发布了 VSCode 拓展程序 支持MySQL数据库. 其他的数据库和更多平台和功能还在进行中...


4.1 VSCode Marketplace:

marketplace.visualstudio.com/items?itemN…

4.2 GitHub:

github.com/blakeanders…