当前位置:网站首页>关于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 使用 | 也没看出区别, 先不写 |
边栏推荐
猜你喜欢

244页pdf!《2022 中国云计算生态蓝皮书》发布

聪明的儿子处理婆媳关系的方法(处理婆媳关系的方法)

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

来 TDengine 开发者大会,洞悉数据技术发展的未来趋势

ShanDong Multi-University Training #4 A、B、C、G

Flutter使用 json_serializable 解析 JSON 最佳方案

论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement

Analysis and comparison of mobile cross-end technical solutions

UMA&港理工&阿里提出SP-ViT,为视觉Transformer学习2D空间先验知识!

如何做好企业数字化转型?这10份靠谱案例收藏了(附下载)
随机推荐
用VbScript控制光驱
直击面试!阿里金九银十最新面试小册 稳过!
鲜花“刺客”收割七夕
Js获取当前页面url参数
聪明的儿子处理婆媳关系的方法(处理婆媳关系的方法)
OAuth2图文快速入门
正则表达式
Neck modules of the yolo series
Flutter 使用 json_serializable 解析 JSON 支持泛型
exness:美联储重现鹰派口吻,黄金承压面临转跌信号
LeetCode每日一题(858. Mirror Reflection)
广告电商系统开发之订单处理
Flutter强大的下拉筛选菜单gzx_dropdown_menu
【UML】信息系统分析与设计知识点总结
Redis(一)安装与配置
年轻人为什么不喜欢买蒙牛、伊利了?
Flutter教程大全合集(2022年版)
抽奖/秒杀/竞价/评分/权威/投票,技术教你用合适的方法做好活动
A Collection of Flutter Tutorials (2022 Edition)
Diffusion Models:生成扩散模型