《Mysql是怎样运行的》读书笔记之连接的原理

从本质上上来说,连接就是把各个表中的记录都取出来依次进行匹配,并把匹配后的组合发送给客户端,如果不加任何过滤条件,产生的结果就是笛卡儿集。
MySQL中,连接分为内连接外连接,其中外连接又可以分成左(外)连接右(外)连接,内连接和外连接的根本区别在于,在驱动表中的记录不符合ON子句中的连接条件时,内连接不会把该记录加入到最后的结果集中,而外连接会。
MySQL中,根据选取的驱动表不同,外连接可以细分为2种。

  • 左外连接:选取左侧的表为驱动表,右侧的表为被驱动表。
  • 右外连接:选取右侧的表为驱动表,左侧的表为被驱动表。

WHERE子句中的过滤条件
不管是内连接还是外连接,凡是不符合 WHERE子句中的过滤条件的记录都不会被加入到最后的结果集。
ON子句中的过滤条件
对于外连接的驱动表中的记录来说,如果无法在被驱动表中找到匹配的ON子句中的过滤条件的记录,那么该驱动表中记录仍然会被加入到结果集中,对应的被驱动表的记录的各个字段使用NULL值填充。
以前关于内连接,外连接,写过一个例子,链接如下:
https://blog.csdn.net/weixin_43213064/article/details/109563051

嵌套循环连接算法是指驱动表只访问一次,但被驱动表却可能会访问多次,访问次数取决于对驱动表执行单表查询后的结果集中有多少条记录,大致过程如下:

  1. 选取驱动表,使用与驱动表相关的过滤条件,选取代价最低的单表访问方法来执行对驱动表的单表查询。
  2. 对步骤1中查询驱动表得到的结果集中的每一条记录,都分别到被驱动表中国查找匹配的记录。

由于被驱动可能会被访问多次,因此可以被驱动表建立合适的索引以加快查询速度。
如果被驱动表非常大,多次访问被驱动表可能导致很多次的磁盘I/O,此时可以使用基于快的嵌套循环连接算法来缓解由此造成的性能损耗。

你可能感兴趣的:(《Mysql是怎样运行的》读书笔记之连接的原理)