在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

MySQL左连接、右连接、内连接与Hash连接怎么实现

129次阅读
没有评论

共计 2187 个字符,预计需要花费 6 分钟才能阅读完成。

这篇“MySQL 左连接、右连接、内连接与 Hash 连接怎么实现”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL 左连接、右连接、内连接与 Hash 连接怎么实现”文章吧。

一、MySQL 数据库 JOIN 连接

在多个表上创建索,并且多个表 JOIN 和子查询语句相对比较困难。许多开发人员不自觉地认为 JOIN 会降低 SQL 的性能效率,因此他们将多表 SQL 拆分为单表查询,认为这会影响 SQL 执行的效率,原因是开发人员不了解 JOIN 实现过程。

联接之间的表关联使用索引进行匹配,假设表 R 和表 S 是连接的。

表 R 被称为驱动表,表 R 中通过 WHERE 条件过滤的数据将在表 S 对应的索引上逐个查询。如果驱动表 R 的数据量不大,则上述算法非常有效。

以下三种 JOIN 类型,驱动表各是哪张表:

SELECT * FROM R LEFT JOIN S ON R.x = S.x WEHRE ...
SELECT * FROM R RIGHT JOIN S ON R.x = S.x WEHRE ...
SELECT * FROM R INNER JOIN S ON R.x = S.x WEHRE ...

1、inner join

对于 INNER JOIN,驱动表可能是表 R,也可能是表 S。显示左边右边共有的数据。

在这种场景下,谁需要查询的数据量越少,谁就是驱动表。我们来看下面的例子

SELECT * FROM R INNER JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?

2、LEFT JOIN

上述 Left Join 来说,驱动表就是左表 R;Right Join 中,驱动表就是右表 S。这是 JOIN 类型决定左表或右表的数据一定要进行查询。

返回包括左表中的所有记录和右表中联结字段相等的记录。即使右表中没有匹配,也从左表返回所有的行。

SELECT * FROM R LEFT JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?

3、RIGHT JOIN

上述 Left Join 来说,驱动表就是左表 R;Right Join 中,驱动表就是右表 S。这是 JOIN 类型决定左表或右表的数据一定要进行查询。

返回包括右表中的所有记录和左表中联结字段相等的记录。即使左表中没有匹配,也从右表返回所有的行。

SELECT * FROM R RIGHT JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?

二、MySQL 数据库 Hash Join1、什么是 Hash Join

MySQL 中的第二个 JOIN 是 Hash JOIN,当两个表之间的连接条件没有索引时使用该算法。

如果没有连接,那么创建索引可以吗?

如果某些列是选择性低的索引,则在创建索引以导入数据时必须对数据进行排序,这会影响导入性能;辅助索引将出现返回表的问题。如果过滤的数据量很大,直接全表扫描会更快。

对于 OLAP 业务查询(OLAP 是在线分析处理,用于数据分析,它使我们能够同时分析来自多个数据库系统的信息),哈希连接是一个必不可少的功能。MySQL 8.0 开始支持 Hash Join 算法,加强了对 OLAP 业务的支持。

因此,如果您的查询数据量不太大,并且查询的响应时间要求在分钟级别,则可以使用单实例 MySQL 8.0 来完成大数据的查询。

2、Hash JOIN 工作原理

Hash JOIN 出现在 MySQL 8.0 的执行计划中,Hash JOIN 扫描关联的两个表:首先,在扫描驱动器表的过程中创建一个哈希表;当扫描第二个表时,将在哈希表中搜索每个关联记录。如果找到,将返回记录。

哈希连接选择驱动程序表和嵌套循环连接算法,两者基本相同。两个较小的表都用作驱动程序表. 如果驱动器表很大,并且创建的哈希表超过了内存大小,MySQL 将自动将结果转储到磁盘。

三、子查询

子查询的逻辑非常清晰。虽然 JOIN 也可以满足需求,但这并不容易理解,因为 LEFT JOIN 是一种代数关系,子查询更倾向于从人类思维的角度来理解。

然而,在 MySQL 8.0 中,优化器会自动将 in 子查询优化为 JOIN 执行计划,这将显著提高性能。

我们只需要关注 SQL 执行计划,如果两个执行计划相同,则性能没有差异。

在 MySQL 8.0 之前,MySQL 没有完全优化子查询。因此,您将在子查询的执行计划中看到 DEPENDENT SUBQUERY 的提示,这表明它是一个从属子查询,子查询需要依赖外部表的关联。DEPENDENT SUBQUERY 的执行速度可能非常慢,而且大多数时候您需要手动将其转换为两个表之间的连接。

所以这里提示大家,如果你的当前的 MySQL 8.0 版本可以编写子查询,因为子查询的优化相当完整;

对于 MySQL 8.0 之前版本的 MySQL,需要查看所有子查询的 SQL 执行计划。对于 DEPENDENT SUBQUERY 的提示,要进行优化,否则将对业务产生重大性能影响;DEPENDENT SUBQUERY 的优化通常被重写为用于表连接的派生表。

以上就是关于“MySQL 左连接、右连接、内连接与 Hash 连接怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计2187字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产成人教育视频在线观看 | 无码超乳爆乳中文字幕久久 | 欧美丰满熟妇性xxxx | 青青视频国产在线播放 | 国产91在线|亚洲 | 日本一区二区三区免费视频 | 真正全免费视频a毛片 | 中文字幕欧洲有码无码 | 久久久精品人妻无码专区不卡 | 在线免费视频一区二区 | 日韩精品亚洲专区在线影视 | 秋霞午夜限制土鳖免费观看 | 亚洲一区二区三区四区五区六区 | 国产丝袜视频一区二区三区 | 2020国产成人免费视频 | 国产午夜三级一区二区三 | 欧美成人r级在线播放 | 免费视频爱爱太爽在线观看 | 美女教师朝桐光在线播放 | 夜夜欢性恔免费视频 | 国产成人精品女人不卡在线 | 国产精品亚洲精品日韩己满十八小 | 日本高清视频www夜色资源 | 国产福利在线观看精品 | 日韩欧美综合 | 国产美女久久精品香蕉69 | 无码人妻丰满熟妇区毛片 | 欧美激情视频一区 | 少妇内射视频播放舔大片 | 亚洲尺码电影av久久 | 亚洲精品午夜国产va久久成人 | 亚洲区小说区激情区图片区 | 亚洲天天看 | 3d动漫精品成人一区二区三 | 日在线视频 | 亚洲欧洲无码一区二区三区 | 亚洲人成欧美中文字幕 | 欧美成人黄色网 | 亚洲第一页在线观看 | 人妻熟女αⅴ一区二区三区 | a级黄色毛片 |