mysql优化-jion
一、jion执行流程
select * from t1 straight_join t2 on t1.a = t2.a 假设 两个表a上都有索引,且强制以t1作为驱动表
执行过程:
- 从t1中读取一行数据R1
- 去t2的a索引树上找a=R1.a的id
- t2回表获取R2于R1组成一个结果
- 重复步骤
select * from t1 straight_join t2 on (t1.a=t2.b);假设 两个表a上都有索引,b没有索引,且强制以t1作为驱动表
执行过程:
- 把t1的数据放入jion_buffer中(join_buffer 放不下,就分段放)
- 从t2中取一行R2出来
- 在join_buffer中找a = R2.b的记录R1,组成结果
- 重复步骤
二、优化
- 尽量让sql走第一种流程,也就是非驱动表要建立索引
- 小表做驱动表(扫描次数少)ps:小表是指经过where 条件筛选后,行数较小,select字段较少的表