select * from a join b on a.id=b.a_id中a是否全表扫描?

存在两个表a、b,b中一列a_id作为外键存储a表id且有索引

select * from a join b on a.id=b.a_id

问1:以上sql是否a表全表扫描,b表使用索引?

select * from b join a on a.id=b.a_id

问2:以上sql(join前后a、b顺序对调)是否b表全表扫描,a表使用索引?


万千封印
浏览 1164回答 2
2回答

慕姐8265434

除非手动指定驱动表(STRAIGHT_JOIN),否则 mysql 优化器会以代价最小的那个表作为驱动表,所以上面两条语句在没有特殊情况下,结果是一样的,你可以 explain 看一下就题主给出的sql,如果 a 为驱动表(a的数量比较少),那么 a 会全表扫描,b 的 a_id 能使用索引。当 b 为驱动表也可以这样分析

慕后森

优化器自己判断驱动表,如果要强制驱动 用STRAIGHT_JOIN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL