打鼓社区-打鼓教学-最新活动 打鼓社区-打鼓教学-最新活动

海南航空官网,卡地亚手镯,尺-打鼓社区-打鼓教学-最新活动

Join操作是一种常见的数据库操作,经过Join可以将多个表相关起来,依据用户的条件一起供给数据。一般状况,在数据库中都会内置多种Join算法,优化器在优化的时分会依据SQL句子和表的核算信息挑选适宜的算法。

Hash Join

Hash Join

在履行Hash Join时,1. 会依据Join条件将一张表进行Hash运算加载到内存中的一张Hash表中。Hash表相似与Java中的HashTable;2.遍历别的一张表,进行Hash运算后在内存中查找满意条件的记载。

select * from t1 join t2 on t1.a = t2.b;在履行这个SQL的时分,先加载表t1的数据,然后依据表t1的a字段作为key结构Hash表。之后,从表t2中逐条取出记载,核算字段b的Hash值,去Hash表中查找是否存在满意条件的记载。

Hash Join的功能很高,可是前提条件是内存中可以存放下其间一张表的Hash表。所以一般适用于巨细表Join。在一些大数据分析的数据查询引擎中,当内存放不下这种Hash表的时分,会将小表进行分区保存到磁盘上,之后再履行Join。

嵌套循环Join

嵌套循环Join

嵌套循环Join中,至少一张表存在索引,且Join的条件是对索引列的比对。带有索引的表作为被检索表,对不带有索引或许两张都带有索引的表中较小的那张表进行遍历。这个算法充分利用了索引的优势,让Join的时刻复杂度从O(m*n)变成了O(n),其间m为被检索表的行数,n为遍历表的行数。

Merge Hash

相关于上述两个算法,这个算法的功能差些,可是使用范围更广些。在这个算法中,相对两张表中的数据进行排序,之后再别离取一段进行Join。

Semi Join

半衔接,关于左面的表输出满意条件的记载,而关于右边的表则不管是否满意条件都不会被输出,也便是,终究的结果是左面表数据记载的一个子集,相似于in、exists。Semi Join自身便是Join的一种。在大数据跨数据源的查询中,Semi Join是对inner join、left join、right join的一种优化。查询跨数据源时,尽量削减从每个数据源出来的数据量是一种很有用的优化方法,究竟网络传输是要花费时刻的。将Join转化成Semi Join是一种有用减小数据量的方法。

关于:select * from t1 join t2 where t1.a = t2.b,Semi Join的进程如下:

1.将表t1的数据加载到内存;

2.依据t1的数据,改写加载表t2的条件,行将SQL句子改写成in、exists等。假定表t1中,悉数记载的a字段只要两个值:aa和bb,那么SQL将被改写为select * from t2 in ('aa','bb');

3.对从表t1和t2加载的数据做Join;

第2步中对加载t2数据的SQL的改写,使本来需求加载整个t2表改为仅加载t2中满意条件的数据。

作者:admin 分类:最近大事件 浏览:219 评论:0