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

mysql join的原理及过程

连接过程

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

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

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

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

连接原理

嵌套循环连接
连接步骤:

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

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

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

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

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

join Buffer (连接缓冲区〉

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

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

​ 由join buffe _size配置。

http://www.lqws.cn/news/481375.html

相关文章:

  • 核心概念解析:AI、数据挖掘、机器学习与深度学习的关系
  • LangGraph--基础学习(memory和持久化)
  • B端登录页防攻击策略:抵御暴力破解的6道硬核防线
  • 前端的跨域问题
  • 从实验室到生产线:机器学习模型部署的七大陷阱及PyTorch Serving避坑指南
  • Java面试复习指南:Java基础、面向对象编程与并发编程
  • Portable Watch:基于STM32的便携智能手表
  • DataX 实现 Doris 和 MySQL 双向同步完全指南
  • 爬虫001----介绍以及可能需要使用的技术栈
  • multiprocessing.pool和multiprocessing.Process
  • 深入剖析AI大模型:关于LlamaIndex知识管理与信息检索应用
  • Python爬虫实战:研究Spynner相关技术
  • 【系统分析师】2018年真题:论文及解题思路
  • Java中栈的实现---Stack、Deque、自定义实现
  • C/C++数据结构之静态数组
  • Excel学习02
  • Gartner金融AI应用机会雷达-学习心得
  • 十、关系数据库设计理论(二)
  • Element表格表头合并技巧
  • js 函数参数赋值问题
  • (码云gitee)IDEA新项目自动创建gitee仓库并直接提交
  • uv功能介绍和完整使用示例总结
  • 目标检测neck算法之MPCA和FSA的源码实现
  • vscode+react+ESLint解决不引入组件,vscode不会报错的问题
  • 分库分表技术栈讲解-Sharding-JDBC
  • Java中进程间通信(IPC)的7种主要方式及原理剖析
  • 通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》
  • Shell参数扩展语法解析
  • 量化-因子处理
  • 3D制作角色模型的教程-1