一、前言

1.1.背景

最近组内在推规范说不能使用Join,感觉有点以偏概全。更多的是合理使用Join,而不是盲目的Join。

1.2.数据准备

假设t1表结构为【id,a(索引),b】数据有100条,t2表结构有1000条数据。

二、正文

2.1.MySQL对于Join的算法有哪几类?

  • Index Nested-Loop Join.

  • Blocked Nested-Loop Join.

2.2.什么是驱动表?什么是被驱动表?如何选择驱动表、被驱动表?怎么让优化器按照指定的驱动表和被驱动表来运行?

  • select * from 驱动表

  • 被join的表一般是被驱动表

  • 驱动表尽量过滤筛选后数据量小,被驱动表一定要使用得上索引

  • straight_join 让 MySQL 使用固定的连接方式执行查询,这样优化器只会按照我们指定的方式去 join

2.3.举一个可以用上NLJ的例子?Index Nested-Loop Join内部执行流程是什么?

  • select * from t1 straight_join t2 on (t1.a=t2.a)

  • 1)对驱动表 t1 做了全表扫描,这个过程需要扫描 100 行,但不是一次性全部加载到内存中;2)对于每一行 R,根据 a 字段去表 t2 查找,走的是非主键索引搜索过程,再根据非主键索引定位到主键索引的一行记录,跟 R 组成一行,作为结果集的一部分

2.4.举一个可以用上BLJ的例子?什么情况下可能会用到BLJ?Block Nested-Loop Join内部执行流程是什么?join_buffer_size默认值是多少?如果join_buffer大小不足怎么办?join_buffer_size越大对Innodb引擎的的影响是什么?

  • select * from t1 straight_join t2 on (t1.a=t2.b)

  • 被驱动表不能用索引情况下会用到BLJ算法

  • 1)将驱动表中的数据要查询的内容加载到join_buffer中。2)扫描表 t2,把表 t2 中的每一行取出来,跟 join_buffer 中的数据做对比,满足 join 条件的,作为结果集的一部分返回。

  • join_buffer_size 默认值是 256k

  • 分批加载

  • 扫描次数减少

PS:本次没有牛逼评论~

34 | 别再说不能使用Join了(这是常识问题-上篇)相关推荐

  1. inner join 和outer join的区别

    1.inner join 和outer join的区别 inner join 和 outer join 是sql语言中的两种联表查询语句 假设,A,B两表各有一个字段 A B1 22 33 54 45 ...

  2. left join最多几张表_Spark中的join策略

    背景 join是SQL中最常见的操作,写SQL最经常的场景就是几张表各种join,join操作也是各种操作中最耗时的操作之一. 作为一个Spark SQL Boy,有必要详细了解一下Spark的joi ...

  3. oracle优化:instr做join条件很慢

    情况描述 sql语句 select sqdbh,sqr,bm,sqrq,skdwbm,skdwmc,sqfkje ,'N' as xz_flag ,sjfkrq,fkdwkhyhfrom (selec ...

  4. mysql status改变_mysql 配置详解mysql SHOW STATUS 详解

    1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...

  5. AOP面向切面编程在Android中的使用

    GitHub地址(欢迎下载完整Demo) https://github.com/ganchuanpu/AOPDemo 项目需求描述 我想类似于这样的个人中心的界面,大家都不会陌生吧.那几个有箭头的地方 ...

  6. memlock mysql_mysql配置详解(不断更新)

    1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...

  7. jQuery EasyUI DataGrid Checkbox 数据设定与取值

    纯粹做个记录,以免日后忘记该怎么设定. 这一篇将会说明两种使用 jQuery EasyUI DataGrid 的 Checkbox 设定方式,以及在既有数据下将 checked 为 true 的该笔数 ...

  8. pd.DataFrame()函数解析(最清晰的解释)

    欢迎关注WX公众号:[程序员管小亮] DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 文章目录 欢迎关注WX公众号:[程序员管小亮] ==DataF ...

  9. mysql45讲--09-44实践篇总结

    09讲普通索引和唯一索引,应该怎么选择 查询过程 执行查询语句 select id from T where k=5 普通索引:查找到满足条件的第一个记录(5,500)后,需要查找下一个记录,直到碰到 ...

最新文章

  1. mysql修改最后一条记录删除第一条记录
  2. Qt中的QStackedLayout
  3. 工业以太网交换机在工厂环境中使用需要注意哪些问题?
  4. 分区分表实验用的语句
  5. 安卓系统校园招聘平台APP答辩PPT免费下载
  6. 读《C程序设计语言》
  7. 金蝶KIS旗舰版直接新增销售出库单使用说明,金蝶盘点机PDA仓库条码管理
  8. 31省“5G应用”主攻方向+责任单位一览!
  9. 酒店的月收入报表java_统计报表_宾馆明细收入报表
  10. (八)office2016-excel绘制斜线表头 双斜线和三斜线
  11. vmware softice
  12. 利用第三方服务平台实现简单的短信验证功能
  13. DELL笔记本自带键盘启动与关闭方式
  14. ICLR 2022:​PiCO,基于对比消歧的偏标签学习 丨AI Drive
  15. 从信息传播角度来看链路预测
  16. JavaScript系列文章:变量提升和函数提升
  17. 判断一个多边形是凸多边形还是凹多边形
  18. 关于Qt6.2中的所有属性绑定
  19. 小甲鱼python第二十讲(内嵌函数和闭包)
  20. go tool 的基本应用

热门文章

  1. Docker Swarm(创建swarm集群,节点的升级降级,滚动更新,Portainer)
  2. 工作3年的985硕士,精通数据和代码,但在报表上我却无能为力
  3. 前端UI:给切图仔升级新技能,学会 PS 动图制作
  4. 网络故障,“远程计算机或设备将不接受连接”,微信qq正常使用
  5. 正宇丨时间不会说谎,看清了人心,见证了真情
  6. 面试题6:朋友圈转发信息
  7. python控制苹果手机触摸屏失灵怎么办_苹果手机有时候触屏失灵怎么办?
  8. ZZULIOJ.1108: 打印数字图形(函数专题)
  9. qml-关于Flow布局不能拖动(滚动)的解决办法
  10. idea自动导包错误