查询SQL尽量不要使用select *,而是select具体字段。
如果知道查询结果只有一条或者只要最大/最小一条记录,建议用limit 1。
应尽量避免在where子句中使用or来连接条件。
优化limit分页。
优化方案一,返回上次最大查询记录(偏移量),这样可以跳过偏移量,效率提升不少。
方案二使用order by+索引,也是可以提高查询效率的。
优化你的like语句。避免 like '%' 开头。
使用where条件限定要查询的数据,避免返回多余的行。需要什么数据,就去查什么数据,避免返回不必要的数据,节省开销。
尽量避免在索引列上使用mysql的内置函数。主要包括字符串函数、数字函数、日期函数、高级操作的函数等。
应尽量避免在where子句中对字段进行表达式操作,这将导致系统放弃使用索引而进行全表扫描。
Inner join 、left join、right join,优先使用Inner join,如果是left join,左边表结果尽量小。
应尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
使用联合索引时,注意索引列的顺序,一般遵循最左匹配原则。
对查询进行优化,应考虑在where及order by涉及的列上建立索引,尽量避免全表扫描。
如果插入数据过多,考虑批量插入。
在适当的时候,使用覆盖索引。
慎用distinct关键字。在查询一个字段或者很少字段的情况下使用时,给查询带来优化效果。但是在字段很多的时候使用,却会大大降低查询效率。
删除冗余和重复索引
如果数据量较大,优化你的修改/删除语句。
where子句中考虑使用默认值代替null。
不要有超过5个以上的表连接
连表越多,编译的时间和开销也就越大。
把连接表拆开成较小的几个执行,可读性更高。
如果一定需要连接很多表才能得到数据,那么意味着糟糕的设计了。
exist & in的合理利用.
select * from A where deptId in (select deptId from B);
如果B的数据量小于A,适合使用in,如果B的数据量大于A,即适合选择exist。
尽量用union all替换 union.
索引不宜太多,一般5个以内。
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型
索引不适合建在有大量重复数据的字段上,如性别这类型数据库字段。
尽量避免向客户端返回过多数据量。
当在SQL语句中连接多个表时,请使用表的别名,并把别名前缀于每一列上,这样语义更加清晰。
尽可能使用varchar/nvarchar 代替 char/nchar。
为了提高group by 语句的效率,可以在执行到该语句前,把不需要的记录过滤掉。
如果字段类型是字符串,where时一定用引号括起来,否则索引失效
使用explain 分析你SQL的计划.
注:内容源自公众号: 捡田螺的小男孩。在此只做笔记使用。