关联查询优化
- 左外连接时,被驱动表(右表)的连接字段加上索引,可以避免对右表的全表扫描
- 内连接时,MySQL自动根据 查询时间最优 选择驱动表,执行引擎会让小表(小结果集)驱动大表
总结:
- 保证被驱动表的JOIN字段创建索引
- 两表的JOIN字段,数据类型保证一致
- 左外连接时,选择小表作为驱动表
- 内连接时,MySQL自动将小结果集的表作为驱动表
- 能使用关联查询的尽量使用关联,不用子查询。子查询建立的衍生表不建立索引
排序优化
- 在ORDER BY字段加上索引,可以避免查询过程出现FileSort排序,如果 WHERE 和 ORDER BY 后面是相同的列就使用单索引列; 如果不同就使用联合索引。
分组优化
- group by 先排序再分组,遵照索引建的最佳左前缀法则
分页查询优化
- 在索引上完成排序分页操作,最后根据主键 关联 原表查询所需要的其他列
- 该方案适用于主键自增的表,可以把Limit 查询转换成某个位置的查询
优先考虑覆盖索引
- 索引页数据中包含满足查询结果的数据就是覆盖索引,不需回表
- 索引字段正好是覆盖了查询条件中所涉及的字段
查询索引下推
- 在存储引擎层使用索引过滤数据的优化方式,当查询出一组数据 需要回表查询前,如果存在查询条件的列的判断条件时,存储引擎会过滤掉一些数据再回表查询