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如何实现关联查询?

  1. 业务代码层面自己实现
  2. 数据冗余,把一些重要数据在表中做冗余
  3. 做宽表处理,多张表合并成一张大表

MySQL8.0的Hash JION何方神圣???