小米开源SQL智能优化与改写工具SOAR
简述
SOAR(SQL优化器和重写器)是一个对SQL进行优化和改写的自动化工具。由小米人工智能与云平台的数据库团队开发与维护。
功能特点
- 跨平台支持(支持Linux,Mac环境,Windows环境理论上也支持,不过未全面测试)
- 目前只支持MySQL语法族协议的SQL优化
- 支持基于启发式算法的语句优化
- 支持复杂查询的多列索引优化(UPDATE,INSERT,DELETE,SELECT)
- 支持EXPLAIN信息丰富解读
- 支持SQL指纹,压缩和美化
- 支持同一张表多条ALTER请求合并
- 支持自定义规则的SQL改写
架构
安装
下载二进制安装包
[root@lnmp software]# wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64
[root@lnmp software]# mv soar.linux-amd64 soar
[root@lnmp software]# chmod a+x soar
[root@lnmp software]# ./soar --help
Usage of ./soar:
-allow-charsets string
AllowCharsets (default "utf8,utf8mb4")
-allow-collates string
AllowCollates
-allow-drop-index
AllowDropIndex, 允许输出删除重复索引的建议
-allow-engines string
AllowEngines (default "innodb")
-allow-online-as-test
AllowOnlineAsTest, 允许线上环境也可以当作测试环境
-blacklist string
指定 blacklist 配置文件的位置,文件中的 SQL 不会被评审。一行一条SQL,可以是指纹,也可以是正则
-check-config
Check configs
-cleanup-test-database
单次运行清理历史1小时前残余的测试库。
-column-not-allow-type string
ColumnNotAllowType (default "boolean")
-config string
Config file path
-delimiter string
Delimiter, SQL分隔符 (default ";")
.....
安装验证
[root@lnmp software]# echo 'select * from user where id = 1' | ./soar
# Query: A19E0F32BA0B5492
★ ★ ★ ★ ☆ 95分
```sql
SELECT
*
FROM
USER
WHERE
id = 1
```
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
* **Severity:** L1
* **Content:** 当表结构变更时,使用 \* 通配符选择所有列将导致查询的含义和行为会发生更改,可能导致查询返回更多的数据。
[root@lnmp software]# echo 'select id,name from user where id = 1' | ./soar
# Query: DA7A90B4B14DD97F
★ ★ ★ ★ ★ 100分
```sql
SELECT
id, name
FROM
USER
WHERE
id = 1
```
## OK
参考资料
- 上一篇: Centos7创建用户并授予sudo权限
- 下一篇: ElasticSearch 7集群部署