MySQL 查询语句join 和 where 的区别

MySQL 查询语句join 和 where 的区别,第1张

MySQL 查询语句join 和 where 的区别

join是数据连接.分为3种. inner join left join right join

inner join 1对1 等同于where A.a=B.b

A a left join B b 在left左边的A代表多,B代表1, 也就 是 多对1.

right 正好相反.

一、指代不同

1、JOIN:用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

2、INNER JOIN :组合两个表中的记录,只要在公共字段中有相符的值。

二、特点不同

1、JOIN:每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

2、INNER JOIN :只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。

三、规定不同

1、JOIN:如果表中有至少一个匹配,则返回行。

2、INNER JOIN :被联接的字段的名称。若不是由数字构成的,则这些字段必须为相同的数据类型并包含同类数据,但无须具有相同的名称。

参考资料来源:百度百科-INNER JOIN

参考资料来源:百度百科-SQL语句大全

1. Nested-Loop Join 翻译过来就是嵌套循环连接,简称 NLJ。

这种是 MySQL 里最简单、最容易理解的表关联算法

比如,拿语句 select * from p1 join p2 using(r1) 来说,

先从表 p1 里拿出来一条记录 ROW1,完了再用 ROW1 遍历表 p2 里的每一条记录,并且字段 r1 来做匹配是否相同,以便输出;再次循环刚才的过程,直到两表的记录数对比完成为止。

2. Block Nested-Loop Join ,块嵌套循环,简称 BNLJ

那 BNLJ 比 NLJ 来说,中间多了一块 BUFFER 来缓存外表的对应记录从而减少了外表的循环次数,也就减少了内表的匹配次数。还是那上面的例子来说,假设 join_buffer_size 刚好能容纳外表的对应 JOIN KEY 记录,那对表 p2 匹配次数就由 1000 次减少到 1 次,性能直接提升了 1000 倍。

3. 最近 MySQL 8.0.18 发布,终于推出了新的 JOIN 算法 — HASH JOIN。

MySQL 的 HASH JOIN 也是用了 JOIN BUFFER 来做缓存,但是和 BNLJ 不同的是,它在 JOIN BUFFER 中以外表为基础建立一张哈希表,内表通过哈希算法来跟哈希表进行匹配,hash join 也就是进一步减少内表的匹配次数。当然官方并没有说明详细的算法描述,以上仅代表个人臆想。那还是针对以上的 SQL,我们来看下执行计划。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5902413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存