Mysql 特殊查询优化


优化查询

优化关联查询

  • 确保ON或者USING子句中的列有索引
  • 确保GROUP BY和ORDER BY中的表达式只涉及到一个表中的列

优化GROUP BY和DISTINCT

采用查找的标识列分组的效率会比其他列高

优化LIMIT分页

如果分页偏移量过大的时候可以使用主键筛选一部分,然后再限制条数。

优化UNION查询

除非需要消除重复的行,否则一定要使用UNION ALL。如果没有UNION ALL,MySQL会对临时表做唯一性检查。

自定义变量

不能使用的场景

  • 使用自定义变量就无法查询缓存
  • 不能再常量或者标识符的地方使用
  • 不能用于做连接间的通信
  • 避免在使用连接池或者持久化连接使用
  • 大小写敏感
  • 不能显示地声明自定义变量的类型
  • 某些场景可能将变量优化
  • 赋值的顺序和赋值时间不固定,依赖于优化器
  • 赋值符号的优先级非常低
  • 使用未定义的变量不回产生任何语法错误

使用场景

  • 优化排名语句
  • 可以避免重复查询刚刚更新的数据
  • 统计更新和插入的数量
  • 确认取值的顺序

优化查询原则

  • 尽量少做事。尽可能不要使用轮询,否则会增加负载,带来很多低产出工作
  • 尽可能得完成需要做的事情。事务提交得越快,持有锁的时间就越短
  • 在不要求精度的情况下使用近似值
  • 一些计算可以通过应用程序计算。

文章作者: 彭峰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭峰 !
  目录