Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
soar
提交
42517c94
S
soar
项目概览
Xiaomi
/
soar
大约 1 年 前同步成功
通知
387
Star
8512
Fork
1328
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
soar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
42517c94
编写于
5月 28, 2019
作者:
martianzhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix upgrade mysql driver import RuleMySQLError bug
1. update change log 2. fix ERR parse bug
上级
35c5c678
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
122 addition
and
4 deletion
+122
-4
CHANGES.md
CHANGES.md
+14
-0
Makefile
Makefile
+2
-1
advisor/heuristic.go
advisor/heuristic.go
+8
-3
test/fixture/test_Run_all_test_cases.golden
test/fixture/test_Run_all_test_cases.golden
+98
-0
未找到文件。
CHANGES.md
浏览文件 @
42517c94
# CHANGELOG
## 2019-05
-
Fix issue #208 14c19f4 regression bug
-
Add max_execution_time hint for explain query
-
Fix #205 create index rewrite error
## 2019-04
-
Add test case for STA.004
-
RuleSpaceWithQuote add list range check
-
Fix #199 -report-type=json add score
-
Fix #98 JSON result format
-
Fix index col compare case sensitive bug
-
Fix ARG.008 cases: col = 1 OR col IS NULL
-
Fix tokenize bug with multi type of quote
## 2019-02
-
add go.mod for go1.11
-
add new -report-type query-type
...
...
Makefile
浏览文件 @
42517c94
...
...
@@ -191,7 +191,8 @@ docker:
-e
MYSQL_DATABASE
=
sakila
\
-p
3306:3306
\
-v
`
pwd
`
/test/sql/init.sql.gz:/docker-entrypoint-initdb.d/init.sql.gz
\
$(MYSQL_RELEASE)
:
$(MYSQL_VERSION)
$(MYSQL_RELEASE)
:
$(MYSQL_VERSION)
\
--sql-mode
""
@echo
"waiting for sakila database initializing "
@
timeout
=
180
;
while
[
$
${timeout}
-gt
0
]
;
do
\
...
...
advisor/heuristic.go
浏览文件 @
42517c94
...
...
@@ -3763,9 +3763,14 @@ func RuleMySQLError(item string, err error) Rule {
}
}
// Received #1146 error from MySQL server: "table xxx doesn't exist"
errReg
:=
regexp
.
MustCompile
(
`(?i)Received #([0-9]+) error from MySQL server: ['"](.*)['"]`
)
errStr
:=
err
.
Error
()
// Error 1071: Specified key was too long; max key length is 3072 bytes
errReg
:=
regexp
.
MustCompile
(
`(?i)Error ([0-9]+): (.*)`
)
if
strings
.
HasPrefix
(
errStr
,
"Received"
)
{
// Received #1146 error from MySQL server: "table xxx doesn't exist"
errReg
=
regexp
.
MustCompile
(
`(?i)Received #([0-9]+) error from MySQL server: ['"](.*)['"]`
)
}
msg
:=
errReg
.
FindStringSubmatch
(
errStr
)
var
mysqlError
MySQLError
...
...
@@ -3798,7 +3803,7 @@ func RuleMySQLError(item string, err error) Rule {
default
:
return
Rule
{
Item
:
item
,
Summary
:
"MySQL execute failed
: "
+
mysqlError
.
ErrString
,
Summary
:
"MySQL execute failed
"
,
Severity
:
"L8"
,
Content
:
mysqlError
.
ErrString
,
}
...
...
test/fixture/test_Run_all_test_cases.golden
浏览文件 @
42517c94
...
...
@@ -974,6 +974,29 @@ GROUP BY
address, district
```
## Explain信息
| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | *address* | NULL | ALL | NULL | NULL | NULL | NULL | 603 | ☠️ **100.00%** | ☠️ **O(n)** | Using temporary |
### Explain信息解读
#### SelectType信息解读
* **SIMPLE**: 简单SELECT(不使用UNION或子查询等).
#### Type信息解读
* ☠️ **ALL**: 最坏的情况, 从头到尾全表扫描.
#### Extra信息解读
* ☠️ **Using temporary**: 表示MySQL在对查询结果排序时使用临时表. 常见于排序order by和分组查询group by.
## 为sakila库的address表添加索引
* **Item:** IDX.001
...
...
@@ -1090,6 +1113,33 @@ ORDER BY
language_id
```
## Explain信息
| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | *film* | NULL | ALL | NULL | NULL | NULL | NULL | 1000 | 10.00% | ☠️ **O(n)** | Using where; Using temporary; Using filesort |
### Explain信息解读
#### SelectType信息解读
* **SIMPLE**: 简单SELECT(不使用UNION或子查询等).
#### Type信息解读
* ☠️ **ALL**: 最坏的情况, 从头到尾全表扫描.
#### Extra信息解读
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的.
* ☠️ **Using filesort**: MySQL会对结果使用一个外部索引排序,而不是从表里按照索引次序读到相关内容. 可能在内存或者磁盘上进行排序. MySQL中无法利用索引完成的排序操作称为'文件排序'.
* ☠️ **Using temporary**: 表示MySQL在对查询结果排序时使用临时表. 常见于排序order by和分组查询group by.
## 为sakila库的film表添加索引
* **Item:** IDX.001
...
...
@@ -3887,6 +3937,31 @@ GROUP BY
first_name
```
## Explain信息
| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | *actor* | NULL | ref | idx\_actor\_last\_name | idx\_actor\_last\_name | 137 | const | 2 | 14.29% | O(log n) | Using where; Using temporary |
### Explain信息解读
#### SelectType信息解读
* **SIMPLE**: 简单SELECT(不使用UNION或子查询等).
#### Type信息解读
* **ref**: 连接不能基于关键字选择单个行, 可能查找到多个符合条件的行. 叫做ref是因为索引要跟某个参考值相比较. 这个参考值或者是一个数, 或者是来自一个表里的多表查询的结果值. 例:'SELECT * FROM tbl WHERE idx_col=expr;'.
#### Extra信息解读
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的.
* ☠️ **Using temporary**: 表示MySQL在对查询结果排序时使用临时表. 常见于排序order by和分组查询group by.
## 为sakila库的actor表添加索引
* **Item:** IDX.001
...
...
@@ -4248,6 +4323,29 @@ GROUP BY
DATE( last_update)
```
## Explain信息
| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | *film* | NULL | ALL | NULL | NULL | NULL | NULL | 1000 | ☠️ **100.00%** | ☠️ **O(n)** | Using temporary |
### Explain信息解读
#### SelectType信息解读
* **SIMPLE**: 简单SELECT(不使用UNION或子查询等).
#### Type信息解读
* ☠️ **ALL**: 最坏的情况, 从头到尾全表扫描.
#### Extra信息解读
* ☠️ **Using temporary**: 表示MySQL在对查询结果排序时使用临时表. 常见于排序order by和分组查询group by.
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录