企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] > [github](https://github.com/XiaoMi/soar) ## 概述 小米公司退出的检查sql语句的工具 ## 功能特点 * 跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试) * 目前只支持 MySQL 语法族协议的 SQL 优化 * 支持基于启发式算法的语句优化 * 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT) * 支持 EXPLAIN 信息丰富解读 * 支持 SQL 指纹、压缩和美化 * 支持同一张表多条 ALTER 请求合并 * 支持自定义规则的 SQL 改写 ## 示例 ### 管道输出 ``` > echo SELECT * FROM `im_app_addin` WHERE `addin_id` = 'pan_14' LIMIT 1 | soar.exe # Query: 88C32A560190E4D2 ★ ★ ★ ☆ ☆ 75分 SELECT * FROM `im_app_addin` WHERE `addin_id` = 'pan_14' LIMIT 1 ## 不建议使用 SELECT * 类型查询 * **Item:** COL.001 * **Severity:** L1 * **Content:** 当表结构变更时,使用 \* 通配符选择所有列将导致查询的含义和行为会发生更改,可能导致查询返回更多的数据。 ## 未使用 ORDER BY 的 LIMIT 查询 * **Item:** RES.002 * **Severity:** L4 * **Content:** 没有 ORDER BY 的 LIMIT 会导致非确定性的结果,这取决于查询执行计划。 ``` ### 基于文件 ``` soar.exe -query file.sql > res.md ``` 输出结果为 makedown ### 连接数据库 连接数据库才有Explain的说明 vim soar.yaml ``` test-dsn: addr: 127.0.0.1:3306 schema: antdbms_xxx user: root password: "xxx" disable: false allow-online-as-test: true ``` 执行 ``` > echo INSERT INTO `antdbms_aipu`.`ext_sms` (`SMS_ID`, `SMS_CONTENT`, `SMS_SEND_LOGIN`, `SMS_SEND_NAME`, `SMS_SEND_TIME`, `SMS_RECV_NAMES`, `SMS_STATUS`, `SMS_RETURN`) VALUES ('1', '1', '1', '1', 0, '1', 1, ''); | soar.exe -config soar.yaml ```