“9ffbccc3ec4d3837a377302641f2ac2f095e4700”上不存在“projects/php-fig/imports.yml”
提交 441b0e88 编写于 作者: martianzhang's avatar martianzhang

fix #213

  fix #213 CLA.001 NO WHERE CONDITION
  fix PRIMARY key append to multi column index
上级 aeb78681
...@@ -329,7 +329,7 @@ func (idxAdv *IndexAdvisor) RuleImplicitConversion() Rule { ...@@ -329,7 +329,7 @@ func (idxAdv *IndexAdvisor) RuleImplicitConversion() Rule {
continue 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]) colList[0].Table, colList[0].Name, colList[0].DataType, typNameMap[val.Type])
common.Log.Debug("Implicit data type conversion: %s", c) common.Log.Debug("Implicit data type conversion: %s", c)
...@@ -356,6 +356,12 @@ func (q *Query4Audit) RuleNoWhere() Rule { ...@@ -356,6 +356,12 @@ func (q *Query4Audit) RuleNoWhere() Rule {
err := sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) { err := sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) {
switch n := node.(type) { switch n := node.(type) {
case *sqlparser.Select: 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" { if n.Where == nil && sqlparser.String(n.From) != "dual" {
rule = HeuristicRules["CLA.001"] rule = HeuristicRules["CLA.001"]
return false, nil return false, nil
......
...@@ -283,31 +283,31 @@ func (idxAdv *IndexAdvisor) IndexAdvise() IndexAdvises { ...@@ -283,31 +283,31 @@ func (idxAdv *IndexAdvisor) IndexAdvise() IndexAdvises {
// 有Where条件的先分析 等值条件 // 有Where条件的先分析 等值条件
for _, index := range idxAdv.whereEQ { for _, index := range idxAdv.whereEQ {
// 对应列在前面已经按散粒度由大到小排序好了 // 对应列在前面已经按散粒度由大到小排序好了
mergeIndex(indexList, index) idxAdv.mergeIndex(indexList, index)
} }
// 若存在非等值查询条件,可以给第一个非等值条件添加索引 // 若存在非等值查询条件,可以给第一个非等值条件添加索引
if len(idxAdv.whereINEQ) > 0 { if len(idxAdv.whereINEQ) > 0 {
mergeIndex(indexList, idxAdv.whereINEQ[0]) idxAdv.mergeIndex(indexList, idxAdv.whereINEQ[0])
} }
// 有WHERE条件,但 WHERE 条件未能给出索引建议就不能再加 GROUP BY 和 ORDER BY 建议了 // 有WHERE条件,但 WHERE 条件未能给出索引建议就不能再加 GROUP BY 和 ORDER BY 建议了
if len(ignore) == 0 { if len(ignore) == 0 {
// 没有非等值查询条件时可以再为 GroupBy 和 OrderBy 添加索引 // 没有非等值查询条件时可以再为 GroupBy 和 OrderBy 添加索引
for _, index := range idxAdv.groupBy { for _, index := range idxAdv.groupBy {
mergeIndex(indexList, index) idxAdv.mergeIndex(indexList, index)
} }
// OrderBy // OrderBy
// 没有 GroupBy 时可以为 OrderBy 加索引 // 没有 GroupBy 时可以为 OrderBy 加索引
if len(idxAdv.groupBy) == 0 { if len(idxAdv.groupBy) == 0 {
for _, index := range idxAdv.orderBy { for _, index := range idxAdv.orderBy {
mergeIndex(indexList, index) idxAdv.mergeIndex(indexList, index)
} }
} }
} }
} else { } else {
// 未指定 Where 条件的,只需要 GroupBy 和 OrderBy 的索引建议 // 未指定 Where 条件的,只需要 GroupBy 和 OrderBy 的索引建议
for _, index := range idxAdv.groupBy { for _, index := range idxAdv.groupBy {
mergeIndex(indexList, index) idxAdv.mergeIndex(indexList, index)
} }
// OrderBy // OrderBy
...@@ -628,7 +628,7 @@ func (idxAdv *IndexAdvisor) buildJoinIndex(meta common.Meta) []IndexInfo { ...@@ -628,7 +628,7 @@ func (idxAdv *IndexAdvisor) buildJoinIndex(meta common.Meta) []IndexInfo {
// 如果该列的库表为join condition中需要添加索引的库表 // 如果该列的库表为join condition中需要添加索引的库表
indexColsList := make(map[string]map[string][]*common.Column) indexColsList := make(map[string]map[string][]*common.Column)
for _, col := range IndexCols { for _, col := range IndexCols {
mergeIndex(indexColsList, col) idxAdv.mergeIndex(indexColsList, col)
} }
if common.Config.TestDSN.Disable || common.Config.OnlineDSN.Disable { if common.Config.TestDSN.Disable || common.Config.OnlineDSN.Disable {
...@@ -722,7 +722,7 @@ func (idxAdv *IndexAdvisor) buildIndexWithNoEnv(indexList map[string]map[string] ...@@ -722,7 +722,7 @@ func (idxAdv *IndexAdvisor) buildIndexWithNoEnv(indexList map[string]map[string]
} }
// mergeIndex 将索引用到的列去重后合并到一起 // 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 { if common.Config.MinCardinality/100 > column.Cardinality {
return return
...@@ -744,6 +744,21 @@ func mergeIndex(idxList map[string]map[string][]*common.Column, column *common.C ...@@ -744,6 +744,21 @@ func mergeIndex(idxList map[string]map[string][]*common.Column, column *common.C
exist = true 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 { if !exist {
idxList[db][tb] = append(idxList[db][tb], column) idxList[db][tb] = append(idxList[db][tb], column)
} }
......
# Query: E813EA038141E9CE # Query: E813EA038141E9CE
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -12,11 +12,5 @@ FROM ...@@ -12,11 +12,5 @@ FROM
JOIN d JOIN d
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: E813EA038141E9CE # Query: E813EA038141E9CE
★ ★ ★ ☆ ☆ 70分 ★ ★ ★ ★ ☆ 90分
```sql ```sql
...@@ -12,14 +12,6 @@ FROM ...@@ -12,14 +12,6 @@ FROM
JOIN d JOIN d
``` ```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 减少 JOIN 的数量 ## 减少 JOIN 的数量
* **Item:** JOI.005 * **Item:** JOI.005
......
...@@ -954,7 +954,7 @@ ORDER BY ...@@ -954,7 +954,7 @@ ORDER BY
# Query: 4ECCA9568BE69E68 # Query: 4ECCA9568BE69E68
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -973,14 +973,6 @@ FROM ...@@ -973,14 +973,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -991,7 +983,7 @@ FROM ...@@ -991,7 +983,7 @@ FROM
# Query: 485D56FC88BBBDB9 # Query: 485D56FC88BBBDB9
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -1010,14 +1002,6 @@ FROM ...@@ -1010,14 +1002,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -1028,7 +1012,7 @@ FROM ...@@ -1028,7 +1012,7 @@ FROM
# Query: 0D0DABACEDFF5765 # Query: 0D0DABACEDFF5765
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -1047,14 +1031,6 @@ FROM ...@@ -1047,14 +1031,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -1143,7 +1119,7 @@ WHERE ...@@ -1143,7 +1119,7 @@ WHERE
# Query: 17D5BCF21DC2364C # Query: 17D5BCF21DC2364C
★ ★ ★ ☆ ☆ 65分 ★ ★ ★ ★ ☆ 85分
```sql ```sql
...@@ -1168,14 +1144,6 @@ FROM ...@@ -1168,14 +1144,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -1241,7 +1209,7 @@ WHERE ...@@ -1241,7 +1209,7 @@ WHERE
# Query: 3FF20E28EC9CBEF9 # Query: 3FF20E28EC9CBEF9
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1252,17 +1220,11 @@ FROM ...@@ -1252,17 +1220,11 @@ FROM
JOIN country JOIN country
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 5C547F08EADBB131 # Query: 5C547F08EADBB131
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1273,17 +1235,11 @@ FROM ...@@ -1273,17 +1235,11 @@ FROM
LEFT JOIN country LEFT JOIN country
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: AF0C1EB58B23D2FA # Query: AF0C1EB58B23D2FA
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1294,17 +1250,11 @@ FROM ...@@ -1294,17 +1250,11 @@ FROM
RIGHT JOIN country RIGHT JOIN country
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 626571EAE84E2C8A # Query: 626571EAE84E2C8A
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1322,14 +1272,6 @@ FROM ...@@ -1322,14 +1272,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **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 # Query: 50F2AB4243CE2071
★ ★ ★ ☆ ☆ 60分 ★ ★ ★ ☆ ☆ 60分
...@@ -1374,7 +1316,7 @@ FROM ...@@ -1374,7 +1316,7 @@ FROM
# Query: 584CCEC8069B6947 # Query: 584CCEC8069B6947
★ ★ ☆ ☆ ☆ 40分 ★ ★ ★ ☆ ☆ 60分
```sql ```sql
...@@ -1397,14 +1339,6 @@ ORDER BY ...@@ -1397,14 +1339,6 @@ ORDER BY
city DESC city DESC
``` ```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 同一张表被连接两次 ## 同一张表被连接两次
* **Item:** JOI.002 * **Item:** JOI.002
...@@ -1929,7 +1863,7 @@ LIMIT ...@@ -1929,7 +1863,7 @@ LIMIT
# Query: 16CB4628D2597D40 # Query: 16CB4628D2597D40
★ ★ ★ ☆ ☆ 65分 ★ ★ ★ ★ ☆ 85分
```sql ```sql
...@@ -1954,14 +1888,6 @@ FROM ...@@ -1954,14 +1888,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -2084,7 +2010,7 @@ WHERE ...@@ -2084,7 +2010,7 @@ WHERE
# Query: 1E8B70E30062FD13 # Query: 1E8B70E30062FD13
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -2094,17 +2020,11 @@ FROM ...@@ -2094,17 +2020,11 @@ FROM
customer STRAIGHT_JOIN address ON customer. address_id= address. address_id customer STRAIGHT_JOIN address ON customer. address_id= address. address_id
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: E48A20D0413512DA # Query: E48A20D0413512DA
☆ ☆ ☆ ☆ 30分 ★ ☆ ☆ ☆ 50分
```sql ```sql
...@@ -2136,14 +2056,6 @@ ORDER BY ...@@ -2136,14 +2056,6 @@ ORDER BY
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **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 语句对多个不同条件使用不同方向的排序无法使用索引 ## ORDER BY 语句对多个不同条件使用不同方向的排序无法使用索引
* **Item:** CLA.007 * **Item:** CLA.007
......
...@@ -954,7 +954,7 @@ ORDER BY ...@@ -954,7 +954,7 @@ ORDER BY
# Query: 4ECCA9568BE69E68 # Query: 4ECCA9568BE69E68
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -973,14 +973,6 @@ FROM ...@@ -973,14 +973,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -991,7 +983,7 @@ FROM ...@@ -991,7 +983,7 @@ FROM
# Query: 485D56FC88BBBDB9 # Query: 485D56FC88BBBDB9
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -1010,14 +1002,6 @@ FROM ...@@ -1010,14 +1002,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -1028,7 +1012,7 @@ FROM ...@@ -1028,7 +1012,7 @@ FROM
# Query: 0D0DABACEDFF5765 # Query: 0D0DABACEDFF5765
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -1047,14 +1031,6 @@ FROM ...@@ -1047,14 +1031,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -1143,7 +1119,7 @@ WHERE ...@@ -1143,7 +1119,7 @@ WHERE
# Query: 17D5BCF21DC2364C # Query: 17D5BCF21DC2364C
★ ★ ★ ☆ ☆ 65分 ★ ★ ★ ★ ☆ 85分
```sql ```sql
...@@ -1168,14 +1144,6 @@ FROM ...@@ -1168,14 +1144,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -1241,7 +1209,7 @@ WHERE ...@@ -1241,7 +1209,7 @@ WHERE
# Query: 3FF20E28EC9CBEF9 # Query: 3FF20E28EC9CBEF9
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1252,17 +1220,11 @@ FROM ...@@ -1252,17 +1220,11 @@ FROM
JOIN country JOIN country
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 5C547F08EADBB131 # Query: 5C547F08EADBB131
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1273,17 +1235,11 @@ FROM ...@@ -1273,17 +1235,11 @@ FROM
LEFT JOIN country LEFT JOIN country
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: AF0C1EB58B23D2FA # Query: AF0C1EB58B23D2FA
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1294,17 +1250,11 @@ FROM ...@@ -1294,17 +1250,11 @@ FROM
RIGHT JOIN country RIGHT JOIN country
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: 626571EAE84E2C8A # Query: 626571EAE84E2C8A
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -1322,14 +1272,6 @@ FROM ...@@ -1322,14 +1272,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **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 # Query: 50F2AB4243CE2071
★ ★ ★ ☆ ☆ 60分 ★ ★ ★ ☆ ☆ 60分
...@@ -1374,7 +1316,7 @@ FROM ...@@ -1374,7 +1316,7 @@ FROM
# Query: 584CCEC8069B6947 # Query: 584CCEC8069B6947
★ ★ ☆ ☆ ☆ 40分 ★ ★ ★ ☆ ☆ 60分
```sql ```sql
...@@ -1397,14 +1339,6 @@ ORDER BY ...@@ -1397,14 +1339,6 @@ ORDER BY
city DESC city DESC
``` ```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 同一张表被连接两次 ## 同一张表被连接两次
* **Item:** JOI.002 * **Item:** JOI.002
...@@ -1929,7 +1863,7 @@ LIMIT ...@@ -1929,7 +1863,7 @@ LIMIT
# Query: 16CB4628D2597D40 # Query: 16CB4628D2597D40
★ ★ ★ ☆ ☆ 65分 ★ ★ ★ ★ ☆ 85分
```sql ```sql
...@@ -1954,14 +1888,6 @@ FROM ...@@ -1954,14 +1888,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -2084,7 +2010,7 @@ WHERE ...@@ -2084,7 +2010,7 @@ WHERE
# Query: 1E8B70E30062FD13 # Query: 1E8B70E30062FD13
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -2094,17 +2020,11 @@ FROM ...@@ -2094,17 +2020,11 @@ FROM
customer STRAIGHT_JOIN address ON customer. address_id= address. address_id customer STRAIGHT_JOIN address ON customer. address_id= address. address_id
``` ```
## 最外层 SELECT 未指定 WHERE 条件 ## OK
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: E48A20D0413512DA # Query: E48A20D0413512DA
☆ ☆ ☆ ☆ 30分 ★ ☆ ☆ ☆ 50分
```sql ```sql
...@@ -2136,14 +2056,6 @@ ORDER BY ...@@ -2136,14 +2056,6 @@ ORDER BY
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **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 语句对多个不同条件使用不同方向的排序无法使用索引 ## ORDER BY 语句对多个不同条件使用不同方向的排序无法使用索引
* **Item:** CLA.007 * **Item:** CLA.007
......
...@@ -2098,7 +2098,7 @@ ORDER BY ...@@ -2098,7 +2098,7 @@ ORDER BY
# Query: 4ECCA9568BE69E68 # Query: 4ECCA9568BE69E68
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -2139,14 +2139,6 @@ FROM ...@@ -2139,14 +2139,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -2157,7 +2149,7 @@ FROM ...@@ -2157,7 +2149,7 @@ FROM
# Query: 485D56FC88BBBDB9 # Query: 485D56FC88BBBDB9
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -2198,14 +2190,6 @@ FROM ...@@ -2198,14 +2190,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -2216,7 +2200,7 @@ FROM ...@@ -2216,7 +2200,7 @@ FROM
# Query: 0D0DABACEDFF5765 # Query: 0D0DABACEDFF5765
★ ★ ★ ☆ ☆ 75分 ★ ★ ★ ★ ☆ 95分
```sql ```sql
...@@ -2257,14 +2241,6 @@ FROM ...@@ -2257,14 +2241,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -2431,7 +2407,7 @@ WHERE ...@@ -2431,7 +2407,7 @@ WHERE
# Query: 17D5BCF21DC2364C # Query: 17D5BCF21DC2364C
★ ★ ★ ☆ ☆ 65分 ★ ★ ★ ★ ☆ 85分
```sql ```sql
...@@ -2485,14 +2461,6 @@ FROM ...@@ -2485,14 +2461,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -2615,7 +2583,7 @@ WHERE ...@@ -2615,7 +2583,7 @@ WHERE
# Query: 3FF20E28EC9CBEF9 # Query: 3FF20E28EC9CBEF9
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -2652,17 +2620,9 @@ FROM ...@@ -2652,17 +2620,9 @@ FROM
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的. * **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 # Query: 5C547F08EADBB131
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -2699,17 +2659,9 @@ FROM ...@@ -2699,17 +2659,9 @@ FROM
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的. * **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 # Query: AF0C1EB58B23D2FA
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -2746,17 +2698,9 @@ FROM ...@@ -2746,17 +2698,9 @@ FROM
* **Using where**: WHERE条件用于筛选出与下一个表匹配的数据然后返回给客户端. 除非故意做的全表扫描, 否则连接类型是ALL或者是index, 且在Extra列的值中没有Using Where, 则该查询可能是有问题的. * **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 # Query: 626571EAE84E2C8A
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -2800,14 +2744,6 @@ FROM ...@@ -2800,14 +2744,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **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 # Query: 50F2AB4243CE2071
★ ★ ★ ☆ ☆ 60分 ★ ★ ★ ☆ ☆ 60分
...@@ -2878,7 +2814,7 @@ FROM ...@@ -2878,7 +2814,7 @@ FROM
# Query: 584CCEC8069B6947 # Query: 584CCEC8069B6947
☆ ☆ ☆ ☆ 30分 ★ ☆ ☆ ☆ 50分
```sql ```sql
...@@ -2948,14 +2884,6 @@ ORDER BY ...@@ -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 * **Item:** JOI.002
...@@ -3836,7 +3764,7 @@ LIMIT ...@@ -3836,7 +3764,7 @@ LIMIT
# Query: 16CB4628D2597D40 # Query: 16CB4628D2597D40
★ ★ ★ ☆ ☆ 65分 ★ ★ ★ ★ ☆ 85分
```sql ```sql
...@@ -3888,14 +3816,6 @@ FROM ...@@ -3888,14 +3816,6 @@ FROM
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -3941,7 +3861,7 @@ GROUP BY ...@@ -3941,7 +3861,7 @@ GROUP BY
| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra | | 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 ...@@ -4087,7 +4007,7 @@ WHERE
# Query: 1E8B70E30062FD13 # Query: 1E8B70E30062FD13
★ ★ ★ ★ ☆ 80分 ★ ★ ★ ★ ★ 100分
```sql ```sql
...@@ -4123,17 +4043,9 @@ FROM ...@@ -4123,17 +4043,9 @@ FROM
* **Using index**: 只需通过索引就可以从表中获取列的信息, 无需额外去读取真实的行数据. 如果查询使用的列值仅仅是一个简单索引的部分值, 则会使用这种策略来优化查询. * **Using index**: 只需通过索引就可以从表中获取列的信息, 无需额外去读取真实的行数据. 如果查询使用的列值仅仅是一个简单索引的部分值, 则会使用这种策略来优化查询.
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
# Query: E48A20D0413512DA # Query: E48A20D0413512DA
☆ ☆ ☆ ☆ 20分 ★ ☆ ☆ ☆ 40分
```sql ```sql
...@@ -4224,14 +4136,6 @@ ORDER BY ...@@ -4224,14 +4136,6 @@ ORDER BY
* **Content:** 在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 * **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 语句对多个不同条件使用不同方向的排序无法使用索引 ## ORDER BY 语句对多个不同条件使用不同方向的排序无法使用索引
* **Item:** CLA.007 * **Item:** CLA.007
...@@ -4703,7 +4607,7 @@ create table hello. t (id int unsigned) ...@@ -4703,7 +4607,7 @@ create table hello. t (id int unsigned)
# Query: 291F95B7DCB74C21 # Query: 291F95B7DCB74C21
★ ★ ★ ★ ☆ 95 ☆ ☆ ☆ ☆ ☆ 0
```sql ```sql
...@@ -4715,6 +4619,10 @@ WHERE ...@@ -4715,6 +4619,10 @@ WHERE
data >= '' data >= ''
``` ```
## MySQL execute failed
Unknown column 'data' in 'where clause'
## 不建议使用 SELECT * 类型查询 ## 不建议使用 SELECT * 类型查询
* **Item:** COL.001 * **Item:** COL.001
...@@ -4735,6 +4643,8 @@ DROP ...@@ -4735,6 +4643,8 @@ DROP
DEFAULT DEFAULT
``` ```
## OK
# Query: B48292EDB9D0E010 # Query: B48292EDB9D0E010
★ ★ ☆ ☆ ☆ 40分 ★ ★ ☆ ☆ ☆ 40分
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册