34 | 别再说不能使用Join了(这是常识问题-上篇)
一、前言
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了(这是常识问题-上篇)相关推荐
- inner join 和outer join的区别
1.inner join 和outer join的区别 inner join 和 outer join 是sql语言中的两种联表查询语句 假设,A,B两表各有一个字段 A B1 22 33 54 45 ...
- left join最多几张表_Spark中的join策略
背景 join是SQL中最常见的操作,写SQL最经常的场景就是几张表各种join,join操作也是各种操作中最耗时的操作之一. 作为一个Spark SQL Boy,有必要详细了解一下Spark的joi ...
- oracle优化:instr做join条件很慢
情况描述 sql语句 select sqdbh,sqr,bm,sqrq,skdwbm,skdwmc,sqfkje ,'N' as xz_flag ,sjfkrq,fkdwkhyhfrom (selec ...
- mysql status改变_mysql 配置详解mysql SHOW STATUS 详解
1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...
- AOP面向切面编程在Android中的使用
GitHub地址(欢迎下载完整Demo) https://github.com/ganchuanpu/AOPDemo 项目需求描述 我想类似于这样的个人中心的界面,大家都不会陌生吧.那几个有箭头的地方 ...
- memlock mysql_mysql配置详解(不断更新)
1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...
- jQuery EasyUI DataGrid Checkbox 数据设定与取值
纯粹做个记录,以免日后忘记该怎么设定. 这一篇将会说明两种使用 jQuery EasyUI DataGrid 的 Checkbox 设定方式,以及在既有数据下将 checked 为 true 的该笔数 ...
- pd.DataFrame()函数解析(最清晰的解释)
欢迎关注WX公众号:[程序员管小亮] DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 文章目录 欢迎关注WX公众号:[程序员管小亮] ==DataF ...
- mysql45讲--09-44实践篇总结
09讲普通索引和唯一索引,应该怎么选择 查询过程 执行查询语句 select id from T where k=5 普通索引:查找到满足条件的第一个记录(5,500)后,需要查找下一个记录,直到碰到 ...
最新文章
- mysql修改最后一条记录删除第一条记录
- Qt中的QStackedLayout
- 工业以太网交换机在工厂环境中使用需要注意哪些问题?
- 分区分表实验用的语句
- 安卓系统校园招聘平台APP答辩PPT免费下载
- 读《C程序设计语言》
- 金蝶KIS旗舰版直接新增销售出库单使用说明,金蝶盘点机PDA仓库条码管理
- 31省“5G应用”主攻方向+责任单位一览!
- 酒店的月收入报表java_统计报表_宾馆明细收入报表
- (八)office2016-excel绘制斜线表头 双斜线和三斜线
- vmware softice
- 利用第三方服务平台实现简单的短信验证功能
- DELL笔记本自带键盘启动与关闭方式
- ICLR 2022:​PiCO,基于对比消歧的偏标签学习 丨AI Drive
- 从信息传播角度来看链路预测
- JavaScript系列文章:变量提升和函数提升
- 判断一个多边形是凸多边形还是凹多边形
- 关于Qt6.2中的所有属性绑定
- 小甲鱼python第二十讲(内嵌函数和闭包)
- go tool 的基本应用
热门文章
- Docker Swarm(创建swarm集群,节点的升级降级,滚动更新,Portainer)
- 工作3年的985硕士,精通数据和代码,但在报表上我却无能为力
- 前端UI:给切图仔升级新技能,学会 PS 动图制作
- 网络故障,“远程计算机或设备将不接受连接”,微信qq正常使用
- 正宇丨时间不会说谎,看清了人心,见证了真情
- 面试题6:朋友圈转发信息
- python控制苹果手机触摸屏失灵怎么办_苹果手机有时候触屏失灵怎么办?
- ZZULIOJ.1108: 打印数字图形(函数专题)
- qml-关于Flow布局不能拖动(滚动)的解决办法
- idea自动导包错误