优化查询
优化关联查询
- 确保ON或者USING子句中的列有索引
- 确保GROUP BY和ORDER BY中的表达式只涉及到一个表中的列
优化GROUP BY和DISTINCT
采用查找的标识列分组的效率会比其他列高
优化LIMIT分页
如果分页偏移量过大的时候可以使用主键筛选一部分,然后再限制条数。
优化UNION查询
除非需要消除重复的行,否则一定要使用UNION ALL。如果没有UNION ALL,MySQL会对临时表做唯一性检查。
自定义变量
不能使用的场景
- 使用自定义变量就无法查询缓存
- 不能再常量或者标识符的地方使用
- 不能用于做连接间的通信
- 避免在使用连接池或者持久化连接使用
- 大小写敏感
- 不能显示地声明自定义变量的类型
- 某些场景可能将变量优化
- 赋值的顺序和赋值时间不固定,依赖于优化器
- 赋值符号的优先级非常低
- 使用未定义的变量不回产生任何语法错误
使用场景
- 优化排名语句
- 可以避免重复查询刚刚更新的数据
- 统计更新和插入的数量
- 确认取值的顺序
优化查询原则
- 尽量少做事。尽可能不要使用轮询,否则会增加负载,带来很多低产出工作
- 尽可能得完成需要做的事情。事务提交得越快,持有锁的时间就越短
- 在不要求精度的情况下使用近似值
- 一些计算可以通过应用程序计算。