查询优化

131 阅读2分钟

关联查询优化

  • 左外连接时,被驱动表(右表)的连接字段加上索引,可以避免对右表的全表扫描
  • 内连接时,MySQL自动根据 查询时间最优 选择驱动表,执行引擎会让小表(小结果集)驱动大表

总结:

  1. 保证被驱动表的JOIN字段创建索引
  2. 两表的JOIN字段,数据类型保证一致
  3. 左外连接时,选择小表作为驱动表
  4. 内连接时,MySQL自动将小结果集的表作为驱动表
  5. 能使用关联查询的尽量使用关联,不用子查询。子查询建立的衍生表不建立索引

排序优化

  • 在ORDER BY字段加上索引,可以避免查询过程出现FileSort排序,如果 WHERE 和 ORDER BY 后面是相同的列就使用单索引列; 如果不同就使用联合索引。

分组优化

  • group by 先排序再分组,遵照索引建的最佳左前缀法则

分页查询优化

  • 在索引上完成排序分页操作,最后根据主键 关联 原表查询所需要的其他列
  • 该方案适用于主键自增的表,可以把Limit 查询转换成某个位置的查询  

优先考虑覆盖索引

  • 索引页数据中包含满足查询结果的数据就是覆盖索引,不需回表
  • 索引字段正好是覆盖了查询条件中所涉及的字段

查询索引下推

  • 在存储引擎层使用索引过滤数据的优化方式,当查询出一组数据 需要回表查询前,如果存在查询条件的列的判断条件时,存储引擎会过滤掉一些数据再回表查询