MySQL查询优化

1、关联查询优化

   select * from A(驱动表) join B(被驱动表)on A.id = B.id;

  • 保证被驱动表的join字段已经被索引(即建立了外键关系);

  • left join时,选择小表作为驱动表,大表作为被驱动表;

  • inner join 时,mysql会自动帮你把小结果集的表选为驱动表;但是有时候不理想,可以使用STRAIGHT_JOIN 替代inner join,明确指定驱动表和被驱动表;

  • 子查询尽量不要放在被驱动表,有可能使用不到索引;

  • 能够直接多表关联的尽量直接关联,不用子查询;

2、子查询优化

  • 尽量不要使用not in 或者not exists;用left outer join on xxx is null代替;

3、排序、分组优化

  • 避免无过滤条件排序,分页也算过滤条件;

  • 避免顺序错(有索引的字段放前面,组合索引最左前缀原理)排序、分组;

  • 避免多字段排序方向不同,如order by a asc,b desc;

4、覆盖索引

  • select具体字段不要select *,这样用不上索引的情况时可以用覆盖索引;
posted @ 2020-03-10 22:33  门虫不是虫  阅读(139)  评论(0编辑  收藏  举报