`select id from t where substring(name,1,3)='abc';`,
`SELECT * FROM tbl WHERE UNIX_TIMESTAMP(loginTime) BETWEEN UNIX_TIMESTAMP('2018-11-16 09:46:00 +0800 CST') AND UNIX_TIMESTAMP('2018-11-22 00:00:00 +0800 CST')`,
// `CREATE FULLTEXT INDEX ft_ip ON tb (ip);`, // TODO: tidb not support yet
`CREATE TABLE tb ( id int(10) unsigned NOT NULL AUTO_INCREMENT, ip varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (id), FULLTEXT KEY ip (ip) ) ENGINE=InnoDB;`,
},
{
`ALTER TABLE tbl add INDEX idx_col (col);`,
`CREATE INDEX part_of_name ON customer (name(10));`,
},
}
for_,sql:=rangesqls[0]{
q,err:=NewQuery4Audit(sql)
iferr==nil{
rule:=q.RuleFulltextIndex()
ifrule.Item!="KEY.010"{
t.Error("Rule not match:",rule.Item,"Expect : KEY.010")
}
}else{
t.Error("sqlparser.Parse Error:",err)
}
}
for_,sql:=rangesqls[1]{
q,err:=NewQuery4Audit(sql)
iferr==nil{
rule:=q.RuleFulltextIndex()
ifrule.Item!="OK"{
t.Error("Rule not match:",rule.Item,"Expect : OK")
@@ -75,6 +75,7 @@ advisor.Rule{Item:"KEY.006", Severity:"L4", Summary:"主键中的列过多", Con
advisor.Rule{Item:"KEY.007", Severity:"L4", Summary:"未指定主键或主键非 int 或 bigint", Content:"未指定主键或主键非 int 或 bigint,建议将主键设置为 int unsigned 或 bigint unsigned。", Case:"CREATE TABLE tbl (a int);", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"KEY.008", Severity:"L4", Summary:"ORDER BY 多个列但排序方向不同时可能无法使用索引", Content:"在 MySQL 8.0之前当 ORDER BY 多个列指定的排序方向不同时将无法使用已经建立的索引。", Case:"SELECT * FROM tbl ORDER BY a DESC, b ASC;", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}
advisor.Rule{Item:"KEY.009", Severity:"L0", Summary:"添加唯一索引前请注意检查数据唯一性", Content:"请提前检查添加唯一索引列的数据唯一性,如果数据不唯一在线表结构调整时将有可能自动将重复列删除,这有可能导致数据丢失。", Case:"CREATE UNIQUE INDEX part_of_name ON customer (name(10));", Position:0, Func:func(*advisor.Query4Audit) advisor.Rule {...}}