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

推荐学习:mysql视频教程
在多个表上创建索,并且多个表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 ...
对于 INNER JOIN,驱动表可能是表 R,也可能是表 S。显示左边右边共有的数据。
在这种场景下,谁需要查询的数据量越少,谁就是驱动表。 我们来看下面的例子
SELECT * FROM R INNER JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?
上述 Left Join 来说,驱动表就是左表 R;Right Join中,驱动表就是右表 S。这是 JOIN 类型决定左表或右表的数据一定要进行查询。
返回包括左表中的所有记录和右表中联结字段相等的记录。即使右表中没有匹配,也从左表返回所有的行。
SELECT * FROM R LEFT JOIN S ON R.x = S.x WHERE R.y = ? AND S.z = ?
上述 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中的第二个 JOIN 是 Hash JOIN,当两个表之间的连接条件没有索引时使用该算法。
如果没有连接,那么创建索引可以吗?
SONIFY.io
设计和开发音频优先的产品和数据驱动的解决方案
83
查看详情
如果某些列是选择性低的索引,则在创建索引以导入数据时必须对数据进行排序,这会影响导入性能;辅助索引将出现返回表的问题。如果过滤的数据量很大,直接全表扫描会更快。
对于OLAP业务查询(OLAP 是在线分析处理,用于数据分析,它使我们能够同时分析来自多个数据库系统的信息),哈希连接是一个必不可少的功能。MySQL 8.0开始支持 Hash Join算法,加强了对 OLAP 业务的支持。
因此,如果您的查询数据量不太大,并且查询的响应时间要求在分钟级别,则可以使用单实例MySQL 8.0来完成大数据的查询。
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 】
相关推荐:
解决jQuery多计算器输入字段冲突的教程
《单词速记宝》设置学习计划方法
无人机考证官网 中国民航无人机考证官网登录入口
Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程
美发店速赢秘籍
优化Google Charts Gauge:在数据库无数据时显示默认值
Win11如何分屏操作_Win11多窗口分屏技巧
lol小红书怎么|直播|?lol小红书|直播|是什么意思?
C#解析并修改XML后保存 如何确保格式与编码的正确性
多多买菜门店端app订单查看方法
《下一站江湖2》独孤剑诀习得方法
《飞猪旅行》购买汽车票方法
J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
《王者荣耀世界》英雄获取攻略
苹果如何下载nanobanana
mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程
深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析
之了课堂app做题入口
Python中对象引用与链表属性赋值的机制解析
5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备
谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程
小红书网页版在线直达 小红书网页版免费登录入口
汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口
Three.js中动态更换3D模型纹理的教程
word文档行距怎么调?word文档调行距的操作步骤
《七读免费小说》开通会员方法
性能与资源监视器快捷打开
青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法
Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】
我居然低估了 DeepSeek,这次更新它做到了这些!
QQ网站入口直接登录 QQ官方正版登录页面
在Django中动态检查模型关联:一种灵活的解决方案
实现可重用自定义Python Range类
C++ optional用法详解_C++17处理可能为空的返回值
CDR如何复制交互式填充色
BunnyStream TUS视频上传指南:解决401认证错误与参数配置
学习通网页版个人登录_学习通网页版个人账户登录入口
铁路12306官网入口 铁路12306中国铁路官网登录首页
视频号视频怎么提取文案?提取的文案如何优化与使用?
传统曲艺莲花落的表演形式是
解决异步Python机器人中同步操作的阻塞问题
解决Flex容器横向滚动内容截断与偏移问题
抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系
12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案
4399小游戏下装链接 4399小游戏下载链接入口
FullCalendar自定义按钮样式定制指南
盲鳗善于分泌黏液猜猜主要用来做什么
实时数据流中高效查找最小值与最大值
优酷官网登录入口电脑版 优酷官网网址入口
2022-11-10
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。