mysql 查询优化 ~ 多表查询改写思路

一 简介:在之前我们从基础可知,现在咱们聊一下改写的几种思路
二 分类:
  1 left join
  2 inner join
  3 right join
三 具体改写思路:
思路1 本身不包含子查询,将多表查询的条件拆分成多个select子查询然后再进行关联
思路2 本身涉及到分组,增加order by null,去掉文件排序,减少消耗
思路3 本身驱动表选择不正确,增加STRAIGHT_JOIN进行强制指定驱动表

思路4 将where条件的关联条件查询改写成join标准语法

思路5  从内到外分步进行处理

思路6  对于因为order by导致的索引错选 可以进行将order by改写成外层select查询

四 分析思路

 1 联合索引在多表查询下可能会失效

如果不确定是索引设置问题还是sql本身需要改写,就把关于表的sql条件查询拆出来,然后进行explain观察,联合索引是否全部走,是的话就不是索引问题. 可能会有这种情况,联合索引在多表join和单表查询的表现形式是不一样的(切记切记)

2 对于多表select操作

   1 按照语句对select内嵌进行拆分,然后explain由内到外进行分别分析,逐个击破

   2 多多注意观察explain,能发现很多线路

        1 出现using filesort using temporay 就证明排序没有选择驱动表列,而且驱动表列应该没有索引

        2 出现 devied 就证明有派生表查询

原文地址:https://www.cnblogs.com/danhuangpai/p/10536766.html