left join 大表和小表

本文讨论了在MySQL中,如何在联合查询时选择驱动表以提高效率,重点比较了leftjoin与innerjoin的区别,强调了左连接可能导致效率降低的原因,以及它们对索引和数据返回的影响。

一般情况下参与联合查询的两张表都会一大一小,如果是join,在没有其他过滤条件的情况下MySQL会自动选择小表作为驱动表。简单来说,驱动表就是主表,left join 中的左表就是驱动表,right join 中的右表是驱动表。

left join 和inner join 的区别
1.left join是返回右边全部记录,右表不满足匹配条件的记录返回对应行返回null,那么单纯的对比逻辑运算量的话,inner join是需要返回2个表的交集部分,left join多返回一部分左表没有返回的数据.
2.mysql文档来看inner join在连接的时候mysql回自动选择较小的表来作为驱动表,从而达到减少循环次数的目的.我们在使用left join的时候它是默认左表作为驱动表的,那么左表的大小是我们来控制的,如果控制不当,左表比较大,那么循环次数自然就会比较多,效率就会下降.虽然这样但是我们实际业务需要经常使用到left join,一切还是要以实际业务为主
3. left不会走a表的索引,走的是b表的索引
4.left 会查询表a 所有的数据,表b没有的就显示为null
5. inner会走索引,并且只展示两者都有的数据(主表(a)走索引)
6.left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值