(1)按需求索取字段,少用select *
用具体字段代替 * ,不要返回用不到的任何字段 count(*)会引起全盘扫描,并且没有任何业务意义,用count(1)代替(*)
(2)规范大小写 from和From,统一大小写
(3)不要把SQL语句写的太复杂
越简单的SQL语句被重用的可能性越高
(4)对查询进行优化,尽量避免全表扫描,首先应该考虑where及order by涉及的列上建立索引
(5)应尽量避免在where子句中使用null值!或者<、>操作符进行判断,否则放弃使用索引而进行全盘扫描。
如:select id from t where num is null
最好不要给数据库留null,尽可能的使用not null填充数据库(除备注、描述、评论之外)
(6)尽量避免在where子句中使用or来连接条件,如果一个字段有索引,一个字段没有索引,将导致放弃使用索引而进行全表扫描。
·like'*%'会用到索引,但是like'%*'就用不到索引。(%写前面,索引失效)
·不适当的查询参数有:not、!=、<>、!>、!<、not、exists、not like等,还有一些不恰当的用法, 例如:对数据库进行计算、等号左边使用函数、使用or,上述语法都用不上索引,降低程序的效率。
(7)不要在where子句中的"="左边进行函数、算数运算或其他表达式运算,否则系统可能无法正确使用索引
1:采用函数处理的字段不能利用索引,如:
select id from t where substring(name,1,3)='abc'
应改为
select id from t where name like ''abc%
2:进行了显或隐式的运算的字段不能进行索引,如
num+20>50
应改为
num>30(优化前每个都进行运算,从而索引失效全表扫描)
如select * from users where year(detecreated)<2007
应改为
select * from users where detecreated <'2007-01-01'
这样会使用针对detecreated的索引,提高效率。
(8)where后面条件顺序影响
where 女生 and 成绩 与 where 成绩 and 女生,第一种更好。