-
查询sql进行不使用select *,而是select具体字段,节省资源,减少网络开销,*查询时,很可能就不会使用到覆盖索引,就会造成回表查询
-
如果知道查询结果只有一条,或者只要最大/最小一条数据,建议用limit 1
-
尽量避免在where子句中用or连接,可以换成两个查询用union all连接,使用or可能导致索引失效
-
优化like语句,like '%123'和like '123%'有区别,把%放前面不走索引,放后面会走索引
-
使用where条件限定要查询的数据,避免返回多余的行,要啥数据就查啥,避免查出来之后再过滤
-
尽量避免在where子句中对字段进行表达式操作,将导致系统放弃使用索引进行全表扫描,比如where age-1=10,不如直接用age=11
-
left join时,左表尽量小,条件进行放在左边处理,或者在join之前处理好再进行join
-
尽量避免在where子句中使用!=或<>操作符,否则引擎可能放弃使用索引进而进行全表扫描,如age<>18,可换为age > 18 union all age <18
-
慎用distinct,在字段很多时候使用会大大降低查询效率,可用group by代替
-
尽量用union all代替union
-
只含数字的字段尽量使用数字类型,不要设置为字符型,字符型会降低查询和连接的性能,并会增加存储开销
-
索引不适合建在有大量重复数据的字段上,如性别等,可能会放弃索引
-
连接多个表时,加上表名
-
先过滤再执行groupby