Mysql优化系列之查询性能优化前篇3(必须知道的几个事实)

Mysql优化系列之查询性能优化前篇3(必须知道的几个事实)

事实一:临时表没有任何索引

  最常见的临时表莫过于在from子句中写子查询,遇到这种情况,Mysql会先将其查询结果放到一张临时表中,

然后将这个临时表当做普通表对待

事实二:执行计划优化

  大多数的sql语句在执行计划中都会被优化,这些优化都是mysql在内部评估分析后优化的,比如我们的关联查询

中的表关联顺序优化,顺便说一下,执行计划也是一个数据结构

事实三:排序,尽量用到索引

  排序是一个成本很高的操作,记住这一点

事实四:IN查询有专门的优化策略

  但是,不要在in()查询中再使用子查询,有两种方式:使用GROUP_CONCAT(),或者EXISTS(),具体的怎么写

熟练的老手稍微百度下肯定能改写出来

事实五:没有绝对真理,一切以测试结果为依据

  不管做什么优化,首先需要有一个数据量接近线上环境的库,作为你的查询测试库,一些难以比较查询效率的sql,

都应该以测试实践为准

最后给出一个彩蛋hint,听说oracle的hint用法超多,mysql我还没用过。。。惭愧,难道是我的业务查询都用不到???

前篇就简单介绍这么多,后面开始陆续总结一些特定的sql查询的优化,俗称干货