接手离职同事的项目,打开一看,三百行的 SQL 全挤成一坨小写,where 里套着五层子查询。先别骂人,用 sql美化的思路把格式理顺,逻辑往往能看清大半。
几条手写的格式约定
- 关键字统一大写,SELECT、FROM、WHERE 一眼能认出来。
- 每个字段单独一行,逗号统一放行尾,团队约定一致就好。
- JOIN 单独一行,ON 条件跟在下面,多表查询这样排最不容易看漏。
- 子查询整体缩进一层,层级一眼可见。
- 长 IN 列表换行排,值太多就挪进临时表,别硬塞。
工具一键搞定
手动排太累。Navicat 里选中语句右键有美化格式化功能,DBeaver 是 Ctrl+Shift+F,VS Code 装 SQL 插件也能格式化,常用工具基本都有现成按钮,选一个顺手的固定用下去。缩进宽度、关键字大小写这些选项,跟团队约定对齐后再保存配置。
美化完先剥子查询
格式理顺只是第一步。把子查询一层层剥出来单独跑,确认每层返回什么,很多看起来诡异的慢查询,剥到第三层就露馅了。顺手给关键表补上别名和注释,后面接手的人会感谢你。
美化之外的三个提醒
格式化只动排版不改语义,这点放心,但改之前先备份原语句,出问题能回滚。带真实库名表名的语句别随手贴在线工具,敏感信息泄露比格式难看严重得多。格式理顺之后,把没用到的列、多余的嵌套清一清,收益比纯排版大。
团队里怎么固化
口头约定最没用,落到动作:仓库里放一份格式约定,评审时格式不合规打回;更省事的是用格式化工具的命令行版,挂进保存钩子或流水线,提交时自动格式化,连争论都省了。
实际取舍:要频繁修改、给别人看、要写进文档的 SQL,都值得花一分钟美化;跑完就删的临时查询,随意就好。