当前位置: 首页 > news >正文

mysql join的原理及过程

连接过程

每获得一条驱动表记录,就立即到被驱动表寻找匹配的记录。

对于两表连接来说,驱动表只会被访问一遍,但被驱动表却要被访问好多遍;具体访问几遍取决于对驱动表执行单表查询后的结果集中有多少条记录。

​ 对于内连接来说,选取哪个表为驱动表都没关系。

​ 而外连接的驱动表是固定的,也就是说左(外)连接的驱动表就是左边的那个表,右(外)连接的驱动表就是右边的那个表。

连接原理

嵌套循环连接
连接步骤:

​ 步骤1 :选取驱动表,使用与驱动表相关的过滤条件,选取代价最低的单表访问方法来执行对驱动表的单表查询.

​ 步骤2:对步骤 1中查询驱动表得到的结果集中的每一条记录,都分别到被驱动表中查找匹配的记录(先通过“涉及两表的过滤条件”匹配,再进行“只涉及被驱动表的过滤条件”进行过滤)。

​ 由于被驱动表可能会访问多次,因此可以为被驱动表建立合适的索引以加快查询速度。

​ 如果驱动表非常大,则可能会多次访问被驱动表,就会导致很多次的磁盘I/O,此时可以使用基于块的嵌套循环连接算法来缓解由此造成的性能损耗。

优化:基于块的嵌套循环连续

join Buffer (连接缓冲区〉

​ Join Buffer 就是在执行连接查询前申请的一块固定大小的内存。先把若干条驱动表结果集中的记录装在这个 Join Buffer 中,然后开始扫描被驱动表,每条被驱动表的记录一次性地与 Join Buffer 中的多条驱动表记录进行匹配。由于匹配的过程都是在内存中完成的,所以这样可以显著减少被驱动表的I/O代价.

​ 最好的情况是 Join Buffer 够大 能容纳驱动表结果集中的所有记录,这样只需要访问一次被驱动表就可以完成连接操作了。

​ 由join buffe _size配置。

相关文章:

  • 一键打包利器:gopack - 极简Go程序编译与压缩工具
  • openapi-generator-maven-plugin自动生成HTTP远程调用客户端
  • Mysql—锁相关面试题(全局锁,表级锁,行级锁)
  • 商品中心—10.商品B端搜索系统的说明文档
  • 防御悬垂指针:C++的多维度安全实践指南
  • 逆向某物 App 登录接口:还原 newSign 算法全流程
  • Vulkan 学习(17)---- 使用 IndexBuffer
  • c#,vb.net LockObject ,多线程锁,多线程安全字典ConcurrentDictionary
  • C/C++数据结构之静态数组
  • Matplotlib入门指南:从安装到绘制基本图形
  • 3D制作角色模型的教程-1
  • Java的锁机制问题
  • 【论文阅读笔记】TransparentGS:当高斯溅射学会“看穿”玻璃,如何攻克透明物体重建难题?
  • Protobuf 与 JSON 的兼容性:技术选型的权衡与实践
  • 风险矩阵与灰色综合评价
  • [OS_26] 计算机系统安全 | CIA原则 | 侧信道攻击
  • 【工具】CrossAttOmics:基于交叉注意力的多组学数据整合技术
  • React纯函数和hooks原理
  • 一次性理解Java垃圾回收--简单直接方便面试时使用
  • 华为云Flexus+DeepSeek征文|在Dify-LLM平台中开发童话故事精灵工作流AI Agent
  • 长沙做网站zwnet/互联网营销的特点
  • 网站专栏怎么做漂亮/英文seo是什么意思
  • 南京尘帆网站建设/品牌传播推广方案
  • 正版传奇手游官方网站/营销型网站有哪些功能
  • 佛山营销型网站定制/免费推广产品的网站
  • 做一个网站需要什么条件/昆明seo关键词排名