容我标题党一回
soar是由小米开源的SQL优化器和重写器
目前是仅支持mysql
按文档安装后
现有 category
和 goods
表; 除主键外, 没有任何索引
写一段垃圾sql
SELECT
*
FROM
(
SELECT
g.NAME, c.NAME AS cats
FROM
goods g
LEFT JOIN category c ON g. cats_id = c. id
) g
WHERE
g.NAME = '充电器'
在soar可执行文件的目录定义配置文件soar.yaml
test-dsn:
addr: 192.168.101.128:3307
schema: localdb
user: root
password: "123456"
disable: false
# 是否允许测试环境与线上环境配置相同
allow-online-as-test: true
# 是否清理测试时产生的临时文件
drop-test-temporary: true
# 语法检查小工具
only-syntax-check: false
sampling-statistic-target: 100
sampling: true
# 日志级别,[0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]
log-level: 7
log-output: ./soar.log
# 优化建议输出格式
report-type: markdown #可以为markdown和html
ignore-rules:
- ""
# 黑名单中的 SQL 将不会给评审意见。一行一条 SQL,可以是正则也可以是指纹,填写指纹时注意问号需要加反斜线转义。
blacklist: ${your_config_dir}/soar.blacklist
# 启发式算法相关配置
max-join-table-count: 5
max-group-by-cols-count: 5
max-distinct-count: 5
max-index-cols-count: 5
max-total-rows: 9999999
spaghetti-query-length: 2048
allow-drop-index: false
# EXPLAIN相关配置
explain-sql-report-type: pretty
explain-type: extended
explain-format: traditional
explain-warn-select-type:
- ""
explain-warn-access-type:
- ALL
explain-max-keys: 3
explain-min-keys: 0
explain-max-rows: 10000
explain-warn-extra:
- ""
explain-max-filtered: 100
explain-warn-scalability:
- O(n)
query: ""
list-heuristic-rules: false
list-test-sqls: false
verbose: true
然后命令行启动
echo "SELECT * FROM (SELECT g.NAME, c.NAME AS cats FROM goods g LEFT JOIN category c ON g.cats_id = c.id ) g WHERE g.NAME = '充电器';" | ./soar -report-type markdown > result.md
结果以markdown格式输出
以下是result.md
文件内容
☆ ☆ ☆ ☆ ☆ 15分
SELECT
*
FROM
(
SELECT
g. NAME, c. NAME AS cats
FROM
goods g
LEFT JOIN category c ON g. cats_id = c. id
) g
WHERE
g. NAME = '充电器'
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | scalability | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | g | NULL | ALL | NULL | 1 | ☠️ 100.00% | ☠️ O(n) | Using where | |||
1 | SIMPLE | c | NULL | eq_ref | PRIMARY | PRIMARY | 4 | localdb.g.cats_id | 1 | ☠️ 100.00% | ☠️ O(n) | Using where |
看起来还是很强大的, 尤其是对于经验不足的同学
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。