为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2019-03-10 14:32:45
存在两个表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表使用索引?
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

除非手动指定驱动表(STRAIGHT_JOIN),否则 mysql 优化器会以代价最小的那个表作为驱动表,所以上面两条语句在没有特殊情况下,结果是一样的,你可以 explain 看一下

就题主给出的sql,如果 a 为驱动表(a的数量比较少),那么 a 会全表扫描,b 的 a_id 能使用索引。当 b 为驱动表也可以这样分析


查看完整回答
反对 回复 2019-03-10
?
慕后森

TA贡献1802条经验 获得超5个赞

优化器自己判断驱动表,如果要强制驱动 用STRAIGHT_JOIN

查看完整回答
反对 回复 2019-03-10
  • 2 回答
  • 0 关注
  • 1163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信