mysql驱动表与被驱动表及join优化

【MySQL】驱动表、被驱动表详解。—— 性能优化。 阅读详情

驱动表与被驱动表

先了解在join连接时哪个表是驱动表,哪个表是被驱动表:
1.当使用left join时,左表是驱动表,右表是被驱动表
2.当使用right join时,右表时驱动表,左表是驱动表
3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表

注意:EXPLAIN语句分析出来的第一行的表即是驱动表

join查询如何选择驱动表与被驱动表

在sql优化中,永远是以小表驱动大表。

例如: A是小表,B是大表
使用left join 时,则应该这样写select * from A a left join B b on a.code=b.code
A表时驱动表,B表是被驱动表

测试:A表140多条数据,B表20万左右的数据量
select * from A a left join B b on a.code=b.code
执行时间:7.5s

select * from B b left join A a on a.code=b.code
执行时间:19s

结论:小表驱动大表优于大表驱动小表

join查询在有索引条件下

驱动表有索引不会使用到索引
被驱动表建立索引会使用到索引

在以小表驱动大表的情况下,再给大表建立索引会大大提高执行速度

测试:给A表,B表建立索引
分析:EXPLAIN select * from A a left join B b on a.code=b.code
在这里插入图片描述

只有B表code使用到索引

如果只给A表的code建立索引会是什么情况?
在这里插入图片描述
在这种情况下,A表索引失效

结论:给被驱动表建立索引

驱动表的含义

MySQL 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个表中查询数据
,然后合并结果。如果还有第三个参与Join,则再通过前两个表的Join结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。

例如:
小表驱动大表:
for(140条){
for(20万条){

}
}

大表驱动小表:
for(20万条){
for(140条){

}
}

大表驱动小表,要通过20万次的连接
小表驱动小表,只需要通过140多次的连接就可以了

所以也可以得出结论
如果A表,B表数据量差不多大的时候,那么选择谁作为驱动表也是无所谓了

忘了补充一句,也可以通过EXPLAIN分析来判断在sql中谁是驱动表,EXPLAIN语句分析出来的第一行的表即是驱动表

结论

在sql优化中
1.以小表驱动大表
2.给被驱动表建立索引

————————————————
版权声明:本文为优快云博主「java小小小黑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_20891495/article/details/93744495

MySQL:如果用left join的话,左边的表一定是驱动表吗 分析left join的话,左边的表一定是驱动表吗,认识小表驱动大表原理。 阅读详情

相关推荐

Spark 之 Join

Spark 之 Join

zhixingheyi_tian的博客 1197

从MySQL小表驱动大表说起

a表有100条记录,b表有10000条记录,两张表做关联查询时,是将a表放前面效率高,还是b表放前面效率高?

zsah2011的博客 3303

ADS学习笔记 1. 功率放大器设计

基于ADS2023 update2的学习笔记1.功率放大器设计

u014087103的博客 1万+

mysql 大表 驱动_MySQL小表驱动大表

在了解之前要先了解对应语法 in 与 exist。in后的括号的表达式结果要求先输出一列字段。与之前的搜索字段匹配,匹配到相同则返回对应行。mysql的执行顺序是先执行子查询,然后执行主查询,用子查询的结果按条匹配主查询。exist后的括号里则无输出要求,exist判断后面的结果集中有没有行,有行则返回外层查询对应的行。ps所以exist还可以这样写: 用常量替换* ,反正是判断有没有行,不需要实...

weixin_30610943的博客 2079

OpenAI Realtime API实时语音交互实战指南

实时语音交互是人机自然对话的核心能力,其本质在于构建低延迟、双向、流式协同的音频-语义闭环。它突破传统REST API的请求-响应范式,依托WebSocket实现毫秒级音频输入流(audio.delta)、模型生成流(text/audio.delta)与动态控制流(session.update)三重并行。该技术显著降低端到端延迟至300ms以内,支撑语音助手、智能客服、对话式教育等强实时场景。本文聚焦OpenAI Realtime API的工程落地,详解PCM音频流处理、VAD语音活动检测、AudioCon

weixin_32285357的博客 390

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

mysql驱动表、被驱动表、大表小表及join优化

驱动表与被驱动表 先了解在join连接时哪个表是驱动表,哪个表是被驱动表: 1.当使用left join时,左表是驱动表,右表是被驱动表 2.当使用right join时,右表是驱动表,左表是被驱动表 3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表 join查询如何选择驱动表与被驱动表   在sql优化中,永远是以小表驱动大表。 例如: A是小表,B是大表   使用left join 时,则应该这样写select * from A a left join B

Coder 1万+

从SolidWorks到Simscape:URDF导出模型错位的5个常见原因及修复方法

本文深入分析了从SolidWorks导出URDF模型到Simscape时出现模型错位的5个常见原因,包括坐标系定义、RPY角陷阱、轴方向统一、质量属性导出和层次结构错乱,并提供了详细的修复方法和实战技巧,帮助工程师高效解决模型错位问题。

weixin_30664051的博客 440

MySQL:left join的驱动表选择,优化器说了算?

本文深入探讨了MySQL中LEFT JOIN的驱动表选择机制,指出优化器基于成本模型而非书写顺序决定执行计划。文章分析了影响决策的关键因素,包括表大小、WHERE子句语义、索引及统计信息,并提供了使用EXPLAIN验证和引导优化器的实战优化指南。

weixin_29197699的博客 303

crazyswarm无人机集群搭建笔记(一)资料索引

crazyswarm无人机搭建笔记:资料收集

Coco_range的博客 806

OpenRA引擎实战:如何从零开始搭建一个经典RTS游戏模组(附资源包)

本文详细介绍了如何利用开源游戏引擎OpenRA从零开始搭建经典RTS游戏模组。内容涵盖开发环境配置、资源管线处理、YAML规则定义、地图编辑与Lua脚本编写等全流程实战指南,并提供了资源包,帮助开发者和爱好者快速创建属于自己的即时战略游戏世界。

silver的专栏 902

MySQL JOIN优化实战:从EXPLAIN结果反推驱动表选择的5个黄金法则

本文深入解析MySQL JOIN优化中驱动表选择的5个黄金法则,通过EXPLAIN执行计划反推优化策略。涵盖LEFT JOIN语义优先、索引覆盖度、WHERE条件影响等核心要点,并提供实战检查清单与参数调优建议,帮助DBA和开发者显著提升查询性能。

gold的博客 862

动态刷新曲线_【GhPython应用】利用反射刷新Image sampler组件

【版权声明】| 作者:月之眼|案例图片来源:Sergiu Radu Pop的facebook| 如有侵权,请联系大水牛平台|如果觉得文章不错,欢迎分享效果展示利用python刷新Image sampler组件,主要的思路就是X输入端:输入要切换的图片路径,我的案例中输入了9张图片。然后通过100毫秒切换一张图片显示,来达到动态显示效果。代码分析run输入端类型:bool (I...

weixin_42393829的博客 531

MySQL 8.0 JOIN 性能优化实战:3种驱动表选择策略与执行计划分析

本文深入探讨MySQL 8.0中JOIN操作的性能优化策略,重点分析驱动表选择的三种实战方案:小表驱动原则、索引驱动策略和STRAIGHT_JOIN强制策略。通过EXPLAIN执行计划深度解析和性能对比测试,帮助开发者显著提升查询效率,实现从200ms到20ms的性能飞跃。

weixin_28702105的博客 314

3. UFS 电气时钟、复位、信号和电源

当接收到用于从 HS-MODE 到 LS-MODE 转换的 DME_POWERMODE.ind 或用于从 HS-MODE 到 HIBERN8 转换的 DME_HIBERNATE_ENTER.ind 时,UFS 主机可以启动一个计时器。在整个 PA_INIT 过程中,不应门控参考时钟。如果 UFS 主机启动从 HS-MODE 到 LS-MODE 或 HIBERN8 的电源模式更改,则应确保在关闭参考时钟之前,至少已经经过了由 bRefClkGatingWaitTime 定义的最小时间间隔,见图 6.3。

qq_42238448的博客 1293

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySQL优化实战:当LEFT JOIN不按套路出牌时,如何强制指定驱动表?

本文深入探讨了MySQL中LEFT JOIN查询的驱动表选择机制,揭示了优化器可能不按书写顺序选择驱动表的原因及潜在性能风险。文章重点介绍了如何使用STRAIGHT_JOIN强制指定驱动表,并提供了通过子查询、索引优化等高级技巧引导优化器的实战策略,帮助开发者在复杂场景下精准控制JOIN执行计划,实现SQL性能优化。

python9snake的博客 158

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MySQL选错驱动表_mysql驱动表与被驱动表及join优化

驱动表与被驱动表先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表join查询如何选择驱动表与被驱动表在sql优化中,永远是以小表驱动大表。例如: A是小表,B是大表使用left join 时...

weixin_33377602的博客 401

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mysql左驱动表_mysql驱动表与被驱动表及join优化

驱动表与被驱动表先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表join查询如何选择驱动表与被驱动表在sql优化中,永远是以小表驱动大表。例如: A是小表,B是大表使用left join 时...

weixin_31526891的博客 422

mysql表连接驱动表_mysql驱动表与被驱动表及join优化

驱动表与被驱动表先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表join查询如何选择驱动表与被驱动表在sql优化中,永远是以小表驱动大表。例如: A是小表,B是大表使用left join 时...

weixin_36071315的博客 390

mysql left join 优化 大表驱动小表 小表驱动大表

SELECT s.id,s.nick,s.userId,s.sid,s.session_key,s.retoke,s.shouquantime,s.refresh_token_timeout,s.timezone,t.endtime from taobao_session as s LEFT JOIN taobao_productrepost_set as t on t.memberId...

qq_36028348的博客 1万+
上一篇: 使用Markdown写出一份漂亮的简历
下一篇: MySQL执行计划extra中常见类型using index 和 using where using index 的区别
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值