当前位置:网站首页>关于mysql join 的一些说明
关于mysql join 的一些说明
2022-08-04 12:28:00 【AntHub】
文章目录
- 结论: 使用小表作为驱动表
- 一般效率: hash > BKA >= 临时表 BKA > NLJ > BNL >SNL;
- 假设驱动表数据量N, 被驱动表数据量M, 由于a=[0,1),则 aN <N
join类型 | 原理 | 说明 |
---|---|---|
SNL | 相当于嵌套的两层 for 循环 | 这个查询方式有点傻,mysql 没有使用 |
NLJ-可接受的联接查询 | 先查驱动表,被驱动表关了字段有索引,走索引扫描(树查找),需要回表; 没有使用 join_buffer | mysql 中的NLJ 指的就是 index-NLJ; O(N + N*log(M)) |
BNL - 一般不可接受的联接查询 | 驱动表放 join_buffer(数据无序), 放不下时分 Block 多(假设k,k=aN)次join; 被驱动表联接字段没有索引,驱动表中每行数据查找会扫全表,找到后在与内存中join_buffer 内容一行行匹配 | O(N + aN*M), join_buffer 一次性放下驱动表数据时,aN =1, 此时时间复杂度: O(N + M), 因此可以通过 增大 join_buffer 加快查询速度,其他使用 join_buffer 的情况优化同理 |
BKA | 相当于 NLJ 驱动表的关联字段放到 join_buffer后排序,join_buffer 中数据批量传给被驱动表的联接索引字段,在普通得到连续的主键字段,回表时会使用到磁盘顺序读; NLJ 使用磁盘顺序读特性优化后 变为BKA, 需要配置开启MRR(innodb 默认策略关闭为on,开启mrr_based=off) | 基于一个前提: 大多数数据是按主键索引递增顺序插入的; 时间复杂度: O(N + aN*log(M)),但是其每次 io 性能提高了 |
BNL 优化 成BKA (使用临时表) | 被驱动表联接字段加索引(冷查询成本高,不合适); 将被驱动表要查询的数据放临时表,在临时表的要联接的字段上加索引; 开启mrr 即可走 BKA | join_buffer 不够时,也可能分批次,所以时间复杂度: O(N + aN*log(M) + 临时表建表成本) |
Hash-Join (join_buffer 够用CHJ) | 相当于 for 循环加Map 匹配联接字段 | O(N + N*hash) |
分块 hash-join (On-Disk Hash-Join) | mysql 8.0.18 使用 | 驱动表分块使用 join_buffer , 被驱动表对每块 probe |
hash 分片 hash-join | mysql 8.0.18 使用 没看太懂 | |
Grace-Hash-Join | oracle 使用 | 没看懂,先不写 |
hybrid Hash-Join | OceanBase 使用 | 也没看出区别, 先不写 |
边栏推荐
- 新消费、出海、大健康......电子烟寻找“避风港”
- 【微信小程序】信息管理与信息系统专业社会实习制作项目--垃圾指纹
- 【软考 系统架构设计师】软件架构设计② 软件架构风格
- 【UML】信息系统分析与设计知识点总结
- Focus!2022 interview must brush 461 interview questions summary + interview + resume template
- A comprehensive understanding of MOS tubes, an article is enough
- 11. Network planning and design
- 面试官:连 INSERT INTO SET 都不知道怎么用,你这3年都干些什么了?
- 如何做好企业数字化转型?这10份靠谱案例收藏了(附下载)
- 项目里的各种配置,你都了解吗?
猜你喜欢
随机推荐
接到“网站动态换主题”的需求,我是如何踩坑的
监督和半监督学习下的多标签分类综述
【黑马早报】尚乘数科上市13天,市值超阿里;北大终止陈春花聘用合同;新东方花近200亿退学费和遣散费;张小泉75%产品贴牌代工...
Why is Luo Zhenyu's A-share dream so difficult to fulfill?
项目里的各种配置,你都了解吗?
干货丨数学规划视角下的分货优化解题思路
两个数组中用第二个数组的Value对比换第一个数组中的Key
如何做好企业数字化转型?这10份靠谱案例收藏了(附下载)
“蔚来杯“2022牛客暑期多校训练营5 B、C、F、G、H、K
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
聪明的儿子处理婆媳关系的方法(处理婆媳关系的方法)
移动跨端技术方案分析对比
独立站卖家如何使用 WhatsApp Business API 建立有意义的客户关系?
外置USB供电与内置锂电池供电自动切换电路
基于BiLSTM的回归预测方法
简要介绍电源效率测试
新消费、出海、大健康......电子烟寻找“避风港”
Analysis and comparison of mobile cross-end technical solutions
FHQ-Treap 简介
程序猿七夕礼物-如何30分钟给女朋友快速搭建专属语聊房