码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 关于mysql join 的一些说明


    文章目录


    • 结论: 使用小表作为驱动表
    • 一般效率: hash > BKA >= 临时表 BKA > NLJ > BNL >SNL;
    • 假设驱动表数据量N, 被驱动表数据量M, 由于a=[0,1),则 aN

    join类型原理说明
    SNL相当于嵌套的两层 for 循环这个查询方式有点傻,mysql 没有使用
    NLJ-可接受的联接查询先查驱动表,被驱动表关了字段有索引,走索引扫描(树查找),需要回表; 没有使用 join_buffermysql 中的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 即可走 BKAjoin_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-joinmysql 8.0.18 使用 没看太懂
    Grace-Hash-Joinoracle 使用没看懂,先不写
    hybrid Hash-JoinOceanBase 使用也没看出区别, 先不写
  • 相关阅读:
    Qt+OSG/osgEarth跨平台编译(用Qt Creator组装各个库,实现一套代码、一套框架,跨平台编译)
    leetcode — JavaScript专题(八):间隔取消、使用方法链的计算器、判断对象是否为空、记忆函数 II、设计可取消函数
    Qt事件、自定义事件、事件过滤、发送事件
    Unity3D Application模拟进入前后台及暂停
    web前端期末大作业网课设计与实现 _简单DIV布局旅游网页——简洁的旅游酒店公寓(15页)html css javascript
    43道Python经典案例题(有答案)
    林乐博士答南科大学子问
    DateTime6
    随手笔记(二)
    JavaWeb学习路线(1)——Ajax到Axios
  • 原文地址:https://blog.csdn.net/wwq921220/article/details/126089883
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号