- 经常要查询的条件加上索引,使用explain分析,避免索引失效
- 避免select * ,而是只查询需要的字段
- 查询一条数据可以加上limit 1
- in条件中的值不能过多,该字段的值不要超过eq_range_index_dive_limit这个参数,5.7版本为200
- 合理的使用LIMIT进行分页:当LIMIT的偏移量过大时,会影响查询效率,当id连续的时候,可以:
- EXPLAIN SELECT id FROM t LIMIT 90000, 10; #扫描行数99184
- EXPLAIN SELECT id FROM t WHERE id > 90000 LIMIT 10; #扫描行数21508
- 用union all代替union,排重的过程需要遍历、排序和比较,它更耗时,更消耗cpu资源,所以如果能用union all的时候,尽量不用union。
- 谨慎使用group_concat,默认拼接的长度是1024,超过就被截取了
- 查询数据量大时不使用order by,会重新排序变慢,放内存去处理更快
- 尽可能使用not null定义字段,null值很难查询优化且占用额外的索引空间,推荐默认数字0代替null,空字符串代替null。
