1、尽量少 join:
MySQL 的优势在于简单,MySQL优化器效率高,对于复杂的多表 Join,一方面由于其优化器受限,所以性能表现不太理想。
2、尽量少排序
排序操作会消耗较多的 CPU 资源,对于MySQL来说,减少排序有多种办法,比如:
1)通过利用索引来排序
2)减少参与排序的记录条数
3)带有DISTINCT,UNION,ORDERBY的SQL语句会启动SQL引擎执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序
4、尽量少or
当 where 子句中存在多个条件以“或”并存的时候,MySQL 的优化器并没有很好的解决其执行计划优化问题,再加上MySQL 特有的 SQL 与 Storage 分层架构方式,造成了其性能比较低下,很多时候使用 union all 或者是union(必要的时候)的方式来代替“or”会得到更好的效果。
5、尽量用 union all 代替 union
union 和 union all 的差异主要是前者需要将两个结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的 CPU 运算,加大资源消耗及延迟。所以当我们可以确认不可能出现重复结果集或者不在乎重复结果集的时候,尽量使用 union all 而不是 union。
7、避免类型转换
当 where 子句中出现的字段的类型和传入的参数类型不一致的时候会发生的类型转换,加大CPU的运算
8、能用DISTINCT的就不用GROUP BY
group by 操作特别慢,比如:
select orderid from details where unitprice > 10 groupby orderid,可改为:select distinct orderid from details where unitprice > 10