关系型数据库三大物理链接的一点猜想
首先声明这篇文章目前只是猜想,当不得真,等待有空时再去证实或排除谬论
三大物理链接
1:是什么
1.1:是sql执行过程的实际执行方式,所有的查询语句都会以这三种方式物理执行.对两张选中的表的信息进行处理,选出符合条件的记录,返回去给调用者.分为嵌套循环链接,排序合并链接,哈希链接
2:为什么
2.1:需要选出两张表中,有交集的部分
3:怎么做
3.1:暂时不知道怎么指定强制使用那种模式,只听说in是使用哈希链接,exists是使用嵌套循环(所有按理来说大数据量in要比exists快些的)
嵌套循环
1:是什么
1.1: 数据库链接方式的一种
2:为什么
2.1: 最简单最容易想到的方式
3:怎么做
3.1:假设指定了A表,B表.外层循环A表,再套一层循环B表,判断A表的这条记录是否与B表的这条记录相等.时间复杂度为o(A*B),如果B表有索引,时间复杂度应该为o(AlogB)(存疑)
排序合并
1:是什么
1.1: 数据库链接方式的一种
2:为什么
2.1: 专门针对输入两表指定字段有序的情况,例如两个表的判断条件列都有索引
3:怎么做
3.1: 假设指定了A表,B表.再定义两个指针Pa,Pb,分别指向两个表的值.这种方式就一个循环,每次判断Pa指向的值是否与Pb指向的值相等.如果不相等,小值的那个指针就往后移一个位置.再与大值比较.
就像人的两条腿一样,一前一后就把两张表走完了.时间复杂度是o(A+B)
哈希链接
1:是什么
1.1: 数据库链接方式的一种
2:为什么
2.1: 专门针对输入两表数据量大且没有顺序的情况
3:怎么做
3.1: 假设指定了A表,B表,先将A表的指定字段哈希到内存中,再将B表的指定字段哈希一下,判断是否哈希值相等.这种方式利用了哈希表的常数级时间复杂度,所以时间复杂度就是o(A+B)