MySQL中join联表的原理
前言
join语句只要做过SQL查询的时候基本上一定使用过,那么join语句的优化一直都是一个头痛的问题,怎么在联表的情况下尽可能的减少扫描行数,大幅度提供联表的查询效率,下面我对这个join语句的原理进行详细的讲解,看完之后,就可以做到心中有数,根据实际情况灵活的对join语句进行优化啦
join常见三种联表
INNER JOIN
可以简写成join
只返回两个表中匹配的行
包含两个表中都存在的记录
本质上就是返回两个表的交集
LEFT JOIN
返回左表的所有行,即使右表中没有匹配
包含左表所有记录
右表没有匹配时,右表列显示为NULL
左表是驱动表
RIGHT JOIN
返回右表的所有行,即使左表中没有匹配
包含右表所有记录
左表没有匹配时,左表列显示为NULL
右表是驱动表
join联表的原理
join关键字是把两个表分为驱动表和被驱动表的
left join 驱动表是左表
right join 驱动表是右表
inner join 也是有驱动表的概念的,因为这个关键字是求的交集,所以它会先检查实际参与关联的行数,就是两个表关联数据都不为空的行数,然后会优先选择参与关联行数少的表作为驱动表
join语句的执行过程 驱动表是⾛全表扫描,被驱动表是⾛搜索
取驱动表中的一条数据,使用这条数据匹配被驱动表的数据,合成把这些数据关联在一起
以此类推,直到驱动表中的数据扫描完毕结束
扫描行数越少,SQL执行效率越高,所以一般来说,我们的优化SQL中join语句目标就可以确定了
1、选择行数较少的表作为驱动表
2、对被驱动表的联接字段建立索引增加被驱动表的查询效率
3、驱动表不一定是具体的表,也可以是过滤后的临时结果集