提交 7c812ec6 编写于 作者: martianzhang's avatar martianzhang

fix #18, #20

  1. ARG.010 wrong case
  2. update gometalinter to 2.0.11 latest version
上级 7500a5ee
......@@ -2044,6 +2044,7 @@ func (q *Query4Audit) RuleSpaceWithQuote() Rule {
}
// RuleHint ARG.010
// TODO: sql_no_cache, straight join
func (q *Query4Audit) RuleHint() Rule {
var rule = q.RuleOK()
err := sqlparser.Walk(func(node sqlparser.SQLNode) (kontinue bool, err error) {
......
......@@ -1731,7 +1731,7 @@ func TestRuleHint(t *testing.T) {
{
`SELECT * FROM t1 USE INDEX (i1) ORDER BY a;`,
`SELECT * FROM t1 IGNORE INDEX (i1) ORDER BY (i2);`,
// vitess syntax not support now
// TODO: vitess syntax not support now
// `SELECT * FROM t1 USE INDEX (i1,i2) IGNORE INDEX (i2);`,
// `SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);`,
},
......
......@@ -251,9 +251,9 @@ func init() {
"ARG.010": {
Item: "ARG.010",
Severity: "L1",
Summary: "不要使用hint,如sql_no_cache,force index,ignore key,straight join等",
Summary: "不要使用hint,如sql_no_cache, force index, ignore key, straight join等",
Content: `hint是用来强制SQL按照某个执行计划来执行,但随着数据量变化我们无法保证自己当初的预判是正确的。`,
Case: "SELECT 'abc '",
Case: "SELECT * FROM t1 USE INDEX (i1) ORDER BY a;",
Func: (*Query4Audit).RuleHint,
},
"ARG.011": {
......
......@@ -162,7 +162,7 @@ SELECT c1,c2,c3 FROM tbl WHERE c1 = 14 OR c1 = 17
```sql
SELECT 'abc '
```
## 不要使用hint,如sql\_no\_cache,force index,ignore key,straight join等
## 不要使用hint,如sql\_no\_cache, force index, ignore key, straight join等
* **Item**:ARG.010
* **Severity**:L1
......@@ -170,7 +170,7 @@ SELECT 'abc '
* **Case**:
```sql
SELECT 'abc '
SELECT * FROM t1 USE INDEX (i1) ORDER BY a;
```
## 不要使用负向查询,如:NOT IN/NOT LIKE
......
......@@ -13,7 +13,7 @@ advisor.Rule{Item:"ARG.006", Severity:"L1", Summary:"应尽量避免在WHERE子
advisor.Rule{Item:"ARG.007", Severity:"L3", Summary:"避免使用模式匹配", Content:"性能问题是使用模式匹配操作符的最大缺点。使用LIKE或正则表达式进行模式匹配进行查询的另一个问题,是可能会返回意料之外的结果。最好的方案就是使用特殊的搜索引擎技术来替代SQL,比如Apache Lucene。另一个可选方案是将结果保存起来从而减少重复的搜索开销。如果一定要使用SQL,请考虑在MySQL中使用像FULLTEXT索引这样的第三方扩展。但更广泛地说,您不一定要使用SQL来解决所有问题。", Case:"select c_id,c2,c3 from tbl where c2 like 'test%'", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"ARG.008", Severity:"L1", Summary:"OR查询索引列时请尽量使用IN谓词", Content:"IN-list谓词可以用于索引检索,并且优化器可以对IN-list进行排序,以匹配索引的排序序列,从而获得更有效的检索。请注意,IN-list必须只包含常量,或在查询块执行期间保持常量的值,例如外引用。", Case:"SELECT c1,c2,c3 FROM tbl WHERE c1 = 14 OR c1 = 17", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"ARG.009", Severity:"L1", Summary:"引号中的字符串开头或结尾包含空格", Content:"如果VARCHAR列的前后存在空格将可能引起逻辑问题,如在MySQL 5.5中'a'和'a '可能会在查询中被认为是相同的值。", Case:"SELECT 'abc '", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"ARG.010", Severity:"L1", Summary:"不要使用hint,如sql_no_cache,force index,ignore key,straight join等", Content:"hint是用来强制SQL按照某个执行计划来执行,但随着数据量变化我们无法保证自己当初的预判是正确的。", Case:"SELECT 'abc '", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"ARG.010", Severity:"L1", Summary:"不要使用hint,如sql_no_cache, force index, ignore key, straight join等", Content:"hint是用来强制SQL按照某个执行计划来执行,但随着数据量变化我们无法保证自己当初的预判是正确的。", Case:"SELECT * FROM t1 USE INDEX (i1) ORDER BY a;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"ARG.011", Severity:"L3", Summary:"不要使用负向查询,如:NOT IN/NOT LIKE", Content:"请尽量不要使用负向查询,这将导致全表扫描,对查询性能影响较大。", Case:"select id from t where num not in(1,2,3);", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"CLA.001", Severity:"L4", Summary:"最外层SELECT未指定WHERE条件", Content:"SELECT语句没有WHERE子句,可能检查比预期更多的行(全表扫描)。对于SELECT COUNT(*)类型的请求如果不要求精度,建议使用SHOW TABLE STATUS或EXPLAIN替代。", Case:"select id from tbl", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"CLA.002", Severity:"L3", Summary:"不建议使用ORDER BY RAND()", Content:"ORDER BY RAND()是从结果集中检索随机行的一种非常低效的方法,因为它会对整个结果进行排序并丢弃其大部分数据。", Case:"select name from tbl where id < 1000 order by rand(number)", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
......
......@@ -162,7 +162,7 @@ SELECT c1,c2,c3 FROM tbl WHERE c1 = 14 OR c1 = 17
```sql
SELECT 'abc '
```
## 不要使用hint,如sql\_no\_cache,force index,ignore key,straight join等
## 不要使用hint,如sql\_no\_cache, force index, ignore key, straight join等
* **Item**:ARG.010
* **Severity**:L1
......@@ -170,7 +170,7 @@ SELECT 'abc '
* **Case**:
```sql
SELECT 'abc '
SELECT * FROM t1 USE INDEX (i1) ORDER BY a;
```
## 不要使用负向查询,如:NOT IN/NOT LIKE
......
......@@ -6,7 +6,7 @@ set -euo pipefail
which retool >/dev/null || go get -u github.com/twitchtv/retool
# This tool can run other checks in a standardized way
retool add gopkg.in/alecthomas/gometalinter.v2 v2.0.5
retool add gopkg.in/alecthomas/gometalinter.v2 v2.0.11
# check spelling
# misspell works with gometalinter
......
......@@ -1016,68 +1016,68 @@
{
"checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=",
"path": "vitess.io/vitess",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=",
"path": "vitess.io/vitess/go/hack",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "L7ROM3XZyVXSD799Isv3bcFFhuQ=",
"path": "vitess.io/vitess/go/sqltypes",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=",
"path": "vitess.io/vitess/go/vt/log",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "+AyVYXW7XGu+R8AUNU0YY8DcE8k=",
"path": "vitess.io/vitess/go/vt/proto/query",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=",
"path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "jUgYgOnOM36Zs1GMRVV+vG1hfnw=",
"path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=",
"path": "vitess.io/vitess/go/vt/proto/vtrpc",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "LDXjimRADIzASesUnWUOJ6smswg=",
"path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
},
{
"checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=",
"path": "vitess.io/vitess/go/vt/vterrors",
"revision": "137eb27a9c3a1789055e90ec1cf5f05bdc001d0c",
"revisionTime": "2018-10-21T20:32:27Z"
"revision": "44180fbce377cb4836348bb7880caa38808af817",
"revisionTime": "2018-10-22T18:04:59Z"
}
],
"rootPath": "github.com/XiaoMi/soar"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册