jion
是什么
jion 是用来多表关联查询
jion方法有三种:left jion,right jion,innner jion
inner jion(等值连接):获取两个表字段匹配关系的记录,即只有两表的交集
left jion:获取左表的全部记录,即使右边无对应匹配的记录
right jion:获取右边的全部记录,即使左边无对应匹配记录
配合一起使用的还有ON关键字,用来指明查询的条件
为啥大厂不推荐用jion
原因是早期MySQL版本,jion的时间复杂读很高。它的实现原理是基于嵌套循环来实现关联查询的。简单地
说就是通过一张表作为外循环,一张表位内循环,然后一一比对,符合条件的就输出。具体算法的实现有三
种,simple nested loop,block nested loop和index nested loop。但效率都不是很高。而且随着你jion表数
量越来越多,时间复杂度以指数级别增长
三种嵌套循环算法
simple nested loop
从名字上就看出来,简单除暴,就是全量扫描连接两张表进行数据的两两对比,时间复杂度可以认
为是N*M
index nested loop
当内循环(即被驱动表)关联的字段有索引的话,可以用索引进行查数据。因为索引的结构是b+树的,
复杂度可以近视为N*logN
block nested loop
其实是引入了一个Buffer,提前把外循环的一部分数据放到JION BUFFER里,然后再一一比对,虽然整
体还是N*M复杂度,但基于内存,效率会高不少
MySQL的驱动表如何选择
不用jion如何实现关联查询?
- 业务代码层面自己实现
- 数据冗余,把一些重要数据在表中做冗余
- 做宽表处理,多张表合并成一张大表