MySQL原理总结之左连接、右连接、内连接与Hash连接


本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了左连接、右连接、内连接与hash连接的工作原理,并分析子查询与join的不同,根据所学提供一些工作中需要掌握的实战技巧,下面一起来看一下,希望对大家有帮助。

MySQL原理总结之左连接、右连接、内连接与Hash连接

推荐学习:mysql视频教程

一、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 Join

1、什么是 Hash Join

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

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

SONIFY.io SONIFY.io

设计和开发音频优先的产品和数据驱动的解决方案

SONIFY.io 83 查看详情 SONIFY.io

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

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

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

2、Hash JOIN 工作原理

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

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

三、子查询

我发现相当多的开发同学,包括我自己更喜欢编写子查询,而不是传统的JOIN语句。

子查询的逻辑非常清晰。虽然 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视频教程

以上就是MySQL原理总结之左连接、右连接、内连接与Hash连接的详细内容,更多请关注其它相关文章!


# 如何设置  # app/网站建设  # 陕西企业seo必看  # 黄冈网站推广哪个好  # 舞钢网站推广公司有哪些  # 大连seo查询软件  # 手袋推广网站  # 专门网站建设公司  # 鞍山网站优化怎么办理  # 大名移动营销推广  # 廊坊抖音关键词排名  # 数据库  # 安全策略  # 工作原理  # 开发人员  # 这会  # 第二个  # 将在  # 这是  # 多个  # 离线  # MySQL 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 天堂漫画网页版在线阅读 天堂漫画手机版入口  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  被称为海蜈蚣的海洋动物是  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  百度竞价WAP显示PC链接问题  《波斯王子:失落的王冠》剑术大师打法攻略  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航  天天漫画2025最新入口 天天漫画永久有效登录入口  快递物流路径揭秘  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  在React中正确处理HTML input type="number"的数值类型  荣耀magicv5怎么上手测评  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  基于键值条件高效映射 Pandas DataFrame 多列数据  J*a实现任务清单管理_集合框架综合入门练手  Excel如何制作月度销售统计图_Excel动态图表制作与控件应用  PDF文件去水印平台入口 PDF水印删除网址  淘口令快速解析技巧  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  《杖剑传说》食谱大全  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  cad怎么隐藏指定的图层_cad隐藏或冻结图层方法  《海豚家》注销账号方法  管理打开的编辑器:固定、分组和关闭技巧  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  抖音号升级成企业资质怎么弄?有什么好处?  如何在mysql中比较InnoDB和MyISAM区别  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  鲨鱼剧场app金币获取方法  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能  iphone16系列配置参数介绍  《下一站江湖2》风神腿获取攻略  GBA模拟器手柄按键设置  Magento 2 产品保存事件中安全更新属性的最佳实践  C++ switch case字符串_C++如何实现字符串switch匹配  聚水潭ERP后台管理系统登录 聚水潭ERP官方登录通道  mysql如何回滚事务_mysql ROLLBACK事务回滚方法  电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  花生壳内网映射新方案  创客贴登录页面入口 创客贴网页版最新网址链接  鸿蒙单条备忘录如何加密  《小宇宙》标记不友善评论方法 

 2022-11-10

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.