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 就证明有派生表查询