Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
soar
提交
441b0e88
S
soar
项目概览
Xiaomi
/
soar
大约 2 年 前同步成功
通知
467
Star
8513
Fork
1329
代码
文件
提交
分支
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看板
提交
441b0e88
编写于
7月 31, 2019
作者:
martianzhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix #213
fix #213 CLA.001 NO WHERE CONDITION fix PRIMARY key append to multi column index
上级
aeb78681
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
84 addition
and
343 deletion
+84
-343
advisor/heuristic.go
advisor/heuristic.go
+7
-1
advisor/index.go
advisor/index.go
+22
-7
test/fixture/test_Check_Max_Join_Table_Count_Default.golden
test/fixture/test_Check_Max_Join_Table_Count_Default.golden
+2
-8
test/fixture/test_Check_Max_Join_Table_Count_Overflow.golden
test/fixture/test_Check_Max_Join_Table_Count_Overflow.golden
+1
-9
test/fixture/test_Check_soar_for_pipe_input.golden
test/fixture/test_Check_soar_for_pipe_input.golden
+16
-104
test/fixture/test_Check_soar_query_for_input_file.golden
test/fixture/test_Check_soar_query_for_input_file.golden
+16
-104
test/fixture/test_Run_all_test_cases.golden
test/fixture/test_Run_all_test_cases.golden
+20
-110
未找到文件。
advisor/heuristic.go
浏览文件 @
441b0e88
...
...
@@ -329,7 +329,7 @@ func (idxAdv *IndexAdvisor) RuleImplicitConversion() Rule {
continue
}
c
:=
fmt
.
Sprintf
(
"%s表中列%s的定义是 %s 而不是 %s"
,
c
:=
fmt
.
Sprintf
(
"%s表中列%s的定义是 %s 而不是 %s
。
"
,
colList
[
0
]
.
Table
,
colList
[
0
]
.
Name
,
colList
[
0
]
.
DataType
,
typNameMap
[
val
.
Type
])
common
.
Log
.
Debug
(
"Implicit data type conversion: %s"
,
c
)
...
...
@@ -356,6 +356,12 @@ func (q *Query4Audit) RuleNoWhere() Rule {
err
:=
sqlparser
.
Walk
(
func
(
node
sqlparser
.
SQLNode
)
(
kontinue
bool
,
err
error
)
{
switch
n
:=
node
.
(
type
)
{
case
*
sqlparser
.
Select
:
for
_
,
f
:=
range
n
.
From
{
switch
f
.
(
type
)
{
case
*
sqlparser
.
JoinTableExpr
:
return
false
,
nil
}
}
if
n
.
Where
==
nil
&&
sqlparser
.
String
(
n
.
From
)
!=
"dual"
{
rule
=
HeuristicRules
[
"CLA.001"
]
return
false
,
nil
...
...
advisor/index.go
浏览文件 @
441b0e88
...
...
@@ -283,31 +283,31 @@ func (idxAdv *IndexAdvisor) IndexAdvise() IndexAdvises {
// 有Where条件的先分析 等值条件
for
_
,
index
:=
range
idxAdv
.
whereEQ
{
// 对应列在前面已经按散粒度由大到小排序好了
mergeIndex
(
indexList
,
index
)
idxAdv
.
mergeIndex
(
indexList
,
index
)
}
// 若存在非等值查询条件,可以给第一个非等值条件添加索引
if
len
(
idxAdv
.
whereINEQ
)
>
0
{
mergeIndex
(
indexList
,
idxAdv
.
whereINEQ
[
0
])
idxAdv
.
mergeIndex
(
indexList
,
idxAdv
.
whereINEQ
[
0
])
}
// 有WHERE条件,但 WHERE 条件未能给出索引建议就不能再加 GROUP BY 和 ORDER BY 建议了
if
len
(
ignore
)
==
0
{
// 没有非等值查询条件时可以再为 GroupBy 和 OrderBy 添加索引
for
_
,
index
:=
range
idxAdv
.
groupBy
{
mergeIndex
(
indexList
,
index
)
idxAdv
.
mergeIndex
(
indexList
,
index
)
}
// OrderBy
// 没有 GroupBy 时可以为 OrderBy 加索引
if
len
(
idxAdv
.
groupBy
)
==
0
{
for
_
,
index
:=
range
idxAdv
.
orderBy
{
mergeIndex
(
indexList
,
index
)
idxAdv
.
mergeIndex
(
indexList
,
index
)
}
}
}
}
else
{
// 未指定 Where 条件的,只需要 GroupBy 和 OrderBy 的索引建议
for
_
,
index
:=
range
idxAdv
.
groupBy
{
mergeIndex
(
indexList
,
index
)
idxAdv
.
mergeIndex
(
indexList
,
index
)
}
// OrderBy
...
...
@@ -628,7 +628,7 @@ func (idxAdv *IndexAdvisor) buildJoinIndex(meta common.Meta) []IndexInfo {
// 如果该列的库表为join condition中需要添加索引的库表
indexColsList
:=
make
(
map
[
string
]
map
[
string
][]
*
common
.
Column
)
for
_
,
col
:=
range
IndexCols
{
mergeIndex
(
indexColsList
,
col
)
idxAdv
.
mergeIndex
(
indexColsList
,
col
)
}
if
common
.
Config
.
TestDSN
.
Disable
||
common
.
Config
.
OnlineDSN
.
Disable
{
...
...
@@ -722,7 +722,7 @@ func (idxAdv *IndexAdvisor) buildIndexWithNoEnv(indexList map[string]map[string]
}
// mergeIndex 将索引用到的列去重后合并到一起
func
mergeIndex
(
idxList
map
[
string
]
map
[
string
][]
*
common
.
Column
,
column
*
common
.
Column
)
{
func
(
idxAdv
*
IndexAdvisor
)
mergeIndex
(
idxList
map
[
string
]
map
[
string
][]
*
common
.
Column
,
column
*
common
.
Column
)
{
// 散粒度低于阈值将不会添加索引
if
common
.
Config
.
MinCardinality
/
100
>
column
.
Cardinality
{
return
...
...
@@ -744,6 +744,21 @@ func mergeIndex(idxList map[string]map[string][]*common.Column, column *common.C
exist
=
true
}
}
// 将 DB 替换成 vEnv 中的数据库名称
dbInVEnv
:=
db
if
_
,
ok
:=
idxAdv
.
vEnv
.
DBRef
[
db
];
ok
{
dbInVEnv
=
idxAdv
.
vEnv
.
DBRef
[
db
]
}
indexMeta
:=
idxAdv
.
IndexMeta
[
dbInVEnv
][
tb
]
// 主键列不需要追加
pr
:=
indexMeta
.
FindIndex
(
database
.
IndexKeyName
,
"PRIMARY"
)
for
_
,
c
:=
range
pr
{
if
c
.
ColumnName
==
column
.
Name
{
exist
=
true
}
}
if
!
exist
{
idxList
[
db
][
tb
]
=
append
(
idxList
[
db
][
tb
],
column
)
}
...
...
test/fixture/test_Check_Max_Join_Table_Count_Default.golden
浏览文件 @
441b0e88
# Query: E813EA038141E9CE
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -12,11 +12,5 @@ FROM
JOIN d
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
test/fixture/test_Check_Max_Join_Table_Count_Overflow.golden
浏览文件 @
441b0e88
# Query: E813EA038141E9CE
★ ★ ★
☆ ☆ 7
0分
★ ★ ★
★ ☆ 9
0分
```sql
...
...
@@ -12,14 +12,6 @@ FROM
JOIN d
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 减少 JOIN 的数量
* **Item:** JOI.005
...
...
test/fixture/test_Check_soar_for_pipe_input.golden
浏览文件 @
441b0e88
...
...
@@ -954,7 +954,7 @@ ORDER BY
# Query: 4ECCA9568BE69E68
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -973,14 +973,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -991,7 +983,7 @@ FROM
# Query: 485D56FC88BBBDB9
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -1010,14 +1002,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -1028,7 +1012,7 @@ FROM
# Query: 0D0DABACEDFF5765
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -1047,14 +1031,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -1143,7 +1119,7 @@ WHERE
# Query: 17D5BCF21DC2364C
★ ★ ★
☆ ☆ 6
5分
★ ★ ★
★ ☆ 8
5分
```sql
...
...
@@ -1168,14 +1144,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -1241,7 +1209,7 @@ WHERE
# Query: 3FF20E28EC9CBEF9
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1252,17 +1220,11 @@ FROM
JOIN country
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: 5C547F08EADBB131
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1273,17 +1235,11 @@ FROM
LEFT JOIN country
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: AF0C1EB58B23D2FA
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1294,17 +1250,11 @@ FROM
RIGHT JOIN country
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: 626571EAE84E2C8A
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1322,14 +1272,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 50F2AB4243CE2071
★ ★ ★ ☆ ☆ 60分
...
...
@@ -1374,7 +1316,7 @@ FROM
# Query: 584CCEC8069B6947
★ ★
☆ ☆ ☆ 4
0分
★ ★
★ ☆ ☆ 6
0分
```sql
...
...
@@ -1397,14 +1339,6 @@ ORDER BY
city DESC
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 同一张表被连接两次
* **Item:** JOI.002
...
...
@@ -1929,7 +1863,7 @@ LIMIT
# Query: 16CB4628D2597D40
★ ★ ★
☆ ☆ 6
5分
★ ★ ★
★ ☆ 8
5分
```sql
...
...
@@ -1954,14 +1888,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -2084,7 +2010,7 @@ WHERE
# Query: 1E8B70E30062FD13
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -2094,17 +2020,11 @@ FROM
customer STRAIGHT_JOIN address ON customer. address_id= address. address_id
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: E48A20D0413512DA
★
☆ ☆ ☆ ☆ 3
0分
★
★ ☆ ☆ ☆ 5
0分
```sql
...
...
@@ -2136,14 +2056,6 @@ ORDER BY
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## ORDER BY 语句对多个不同条件使用不同方向的排序无法使用索引
* **Item:** CLA.007
...
...
test/fixture/test_Check_soar_query_for_input_file.golden
浏览文件 @
441b0e88
...
...
@@ -954,7 +954,7 @@ ORDER BY
# Query: 4ECCA9568BE69E68
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -973,14 +973,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -991,7 +983,7 @@ FROM
# Query: 485D56FC88BBBDB9
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -1010,14 +1002,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -1028,7 +1012,7 @@ FROM
# Query: 0D0DABACEDFF5765
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -1047,14 +1031,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -1143,7 +1119,7 @@ WHERE
# Query: 17D5BCF21DC2364C
★ ★ ★
☆ ☆ 6
5分
★ ★ ★
★ ☆ 8
5分
```sql
...
...
@@ -1168,14 +1144,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -1241,7 +1209,7 @@ WHERE
# Query: 3FF20E28EC9CBEF9
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1252,17 +1220,11 @@ FROM
JOIN country
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: 5C547F08EADBB131
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1273,17 +1235,11 @@ FROM
LEFT JOIN country
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: AF0C1EB58B23D2FA
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1294,17 +1250,11 @@ FROM
RIGHT JOIN country
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: 626571EAE84E2C8A
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -1322,14 +1272,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 50F2AB4243CE2071
★ ★ ★ ☆ ☆ 60分
...
...
@@ -1374,7 +1316,7 @@ FROM
# Query: 584CCEC8069B6947
★ ★
☆ ☆ ☆ 4
0分
★ ★
★ ☆ ☆ 6
0分
```sql
...
...
@@ -1397,14 +1339,6 @@ ORDER BY
city DESC
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 同一张表被连接两次
* **Item:** JOI.002
...
...
@@ -1929,7 +1863,7 @@ LIMIT
# Query: 16CB4628D2597D40
★ ★ ★
☆ ☆ 6
5分
★ ★ ★
★ ☆ 8
5分
```sql
...
...
@@ -1954,14 +1888,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -2084,7 +2010,7 @@ WHERE
# Query: 1E8B70E30062FD13
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -2094,17 +2020,11 @@ FROM
customer STRAIGHT_JOIN address ON customer. address_id= address. address_id
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## OK
# Query: E48A20D0413512DA
★
☆ ☆ ☆ ☆ 3
0分
★
★ ☆ ☆ ☆ 5
0分
```sql
...
...
@@ -2136,14 +2056,6 @@ ORDER BY
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## ORDER BY 语句对多个不同条件使用不同方向的排序无法使用索引
* **Item:** CLA.007
...
...
test/fixture/test_Run_all_test_cases.golden
浏览文件 @
441b0e88
...
...
@@ -2098,7 +2098,7 @@ ORDER BY
# Query: 4ECCA9568BE69E68
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -2139,14 +2139,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -2157,7 +2149,7 @@ FROM
# Query: 485D56FC88BBBDB9
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -2198,14 +2190,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -2216,7 +2200,7 @@ FROM
# Query: 0D0DABACEDFF5765
★ ★ ★
☆ ☆ 7
5分
★ ★ ★
★ ☆ 9
5分
```sql
...
...
@@ -2257,14 +2241,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -2431,7 +2407,7 @@ WHERE
# Query: 17D5BCF21DC2364C
★ ★ ★
☆ ☆ 6
5分
★ ★ ★
★ ☆ 8
5分
```sql
...
...
@@ -2485,14 +2461,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -2615,7 +2583,7 @@ WHERE
# Query: 3FF20E28EC9CBEF9
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -2652,17 +2620,9 @@ FROM
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的.
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 5C547F08EADBB131
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -2699,17 +2659,9 @@ FROM
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的.
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: AF0C1EB58B23D2FA
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -2746,17 +2698,9 @@ FROM
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的.
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 626571EAE84E2C8A
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -2800,14 +2744,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 50F2AB4243CE2071
★ ★ ★ ☆ ☆ 60分
...
...
@@ -2878,7 +2814,7 @@ FROM
# Query: 584CCEC8069B6947
★
☆ ☆ ☆ ☆ 3
0分
★
★ ☆ ☆ ☆ 5
0分
```sql
...
...
@@ -2948,14 +2884,6 @@ ORDER BY
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 同一张表被连接两次
* **Item:** JOI.002
...
...
@@ -3836,7 +3764,7 @@ LIMIT
# Query: 16CB4628D2597D40
★ ★ ★
☆ ☆ 6
5分
★ ★ ★
★ ☆ 8
5分
```sql
...
...
@@ -3888,14 +3816,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -3941,7 +3861,7 @@ GROUP BY
| 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 |
| 1 | SIMPLE | *actor* | NULL | ref | idx\_actor\_last\_name | idx\_actor\_last\_name | 137 | const | 2 |
25.00
% | O(log n) | Using where; Using temporary |
...
...
@@ -4087,7 +4007,7 @@ WHERE
# Query: 1E8B70E30062FD13
★ ★ ★ ★
☆ 8
0分
★ ★ ★ ★
★ 10
0分
```sql
...
...
@@ -4123,17 +4043,9 @@ FROM
* **Using index**: 只需通过索引就可以从表中获取列的信息, 无需额外去读取真实的行数据. 如果查询使用的列值仅仅是一个简单索引的部分值, 则会使用这种策略来优化查询.
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: E48A20D0413512DA
★
☆ ☆ ☆ ☆ 2
0分
★
★ ☆ ☆ ☆ 4
0分
```sql
...
...
@@ -4224,14 +4136,6 @@ ORDER BY
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## ORDER BY 语句对多个不同条件使用不同方向的排序无法使用索引
* **Item:** CLA.007
...
...
@@ -4703,7 +4607,7 @@ create table hello. t (id int unsigned)
# Query: 291F95B7DCB74C21
★ ★ ★ ★ ☆ 95
分
☆ ☆ ☆ ☆ ☆ 0
分
```sql
...
...
@@ -4715,6 +4619,10 @@ WHERE
data >= ''
```
## MySQL execute failed
Unknown column 'data' in 'where clause'
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
...
...
@@ -4735,6 +4643,8 @@ DROP
DEFAULT
```
## OK
# Query: B48292EDB9D0E010
★ ★ ☆ ☆ ☆ 40分
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录