GBase 8s
运维管理
文章

表上的连接方法

GBase社区管理员
发表于2023-05-12 10:48:0727次浏览0个评论

嵌套循环连接(nested loops join):

     该方法从第一个行源中读取第一行,然后查找第二个行源中匹配的记录。将所有匹配到的结果放入结果集中,然后开始读取第一个行源的下一行记录,然后循环至结束为止。

    第一个行源通常称为外表或驱动表,第二个行源称为内表。

    在驱动行源很小且内表的连接列上有唯一索引或选择性非常高的时候,嵌套循环连接是非常合适的。

 

排序合并连接(sort_merge join):

      在排序合并连接中,数据库讲第一个行源和第二个行源按他们各自的连接排序,然后将两个已经排好序的行源合并,发现匹配的就放入结果集中。

      当索引的选择性不好或嵌套循环效率不高的时候或当每个行源都过于庞大的时候,排序合并连接或许会效率更高。

      排序合并连接看用于等值和非等值连接(where d.deptno=...和where d.deptno>e.deptno),哈希连接只能用于等值连接。

      排序连接可能会使用临时段用来存储排序。

 

哈希连接(hash join):

      在hash连接中,数据库访问一个表(通常是连接结果中较小的表),并根据连接键在内存中建立一个哈希表。

      然后扫描连接中的另一个表(通常是较大的表),并根据哈希检测是否有匹配的记录。

      哈希连接和嵌套循环连接有点类似,数据库首先建立一个哈希表以利于操作进行,然后循环访问哈希表。

      哈希连接可能比排序连接更快,因为哈希连接中只需要对一个源进行排序。

      哈希连接可能比嵌套循环更快,因为检索内存中的哈希表比遍历B树索引更快。

      哈希连接只能用于等值连接。

评论已关闭