查询SQL尽量不要使用select *,而是select具体字段。
索引列不能参与计算,保持列“干净”
尽量的扩展索引,不要新建索引。
如果知道查询结果只有一条或者只要最大/最小一条记录,建议用limit 1
应尽量避免在where子句中使用or来连接条件
优化limit分页 id>100000
优化你的like语句 前缀索引
使用where条件限定要查询的数据,避免返回多余的行
尽量避免在索引列上使用mysql的内置函数
使用联合索引时,注意索引列的顺序,一般遵循最左匹配原则
对查询进行优化,应考虑在 where 及 order by 涉及的列上建立索引,尽量避免全表扫描。
如果插入数据过多,考虑批量插入。
在适当的时候,使用覆盖索引。
慎用distinct关键字
删除冗余和重复索引
如果数据量较大,优化你的修改/删除语句。避免同时修改或删除过多数据,因为会造成cpu利用率过高
where子句中考虑使用默认值代替null。
不要有超过5个以上的表连接
exist & in的合理利用小表驱动大表,小的数据集驱动大的数据集,从而让性能更优。
尽量用 union all 替换 union
(如果使用union,不管检索结果有没有重复,都会尝试进行合并,然后在输出最终结果前进行排序。如果已知检索结果没有重复记录,使用union all 代替union,这样会提高效率。)
索引不宜太多,一般5个以内
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型
索引不适合建在有大量重复数据的字段上,如性别这类型数据库字段。
尽量避免向客户端返回过多数据量
当在SQL语句中连接多个表时,请使用表的别名,并把别名前缀于每一列上,这样语义更加清晰。
尽可能使用varchar/nvarchar 代替 char/nchar。
为了提高group by 语句的效率,可以在执行到该语句前,把不需要的记录过滤掉。
如何字段类型是字符串,where时一定用引号括起来,否则索引失效
使用explain 分析你SQL的计划 中的type system>const>eq_ref>ref>range>index>ALL
最左原则,覆盖索引,减少select 不必要的列,优化子查询