第3章查询处理:加入PostgreSQL中的操作(继续)
#postgres #database #apacheage #postgressql

previous博客中,我们开始讨论有关PostgreSQL中的加入操作,JOIN算法对于有效合并许多表的数据至关重要。

在此博客中,我们将进一步发展并讨论合并加入和哈希加入,这是两个流行的加入算法。我们将进一步谈论他们的变化。

合并加入:

此联接算法适用于等电量和天然结合。它有效地利用了分类的想法来集成两个表的分类数据。让我们调查其运行时变化和序列。

运行时顺序:

内部和外表的总分类成本构成了合并加入的启动成本。 o(外部 * log2(outer) + inner * log2(inne))可用于表示它。每个表中的元素量,外部和内部,确定运行成本,即O(外部 +内)。

变化:

  1. 合并加入:这是最简单的合并类型。要根据提供的联接条件加入元组,它在两个排序的表上运行合并操作。

Merge Join

  1. 实现的合并加入:在这种情况下,内表是实现的,这增加了内表扫描的有效性。在内部表格进行分类和实现之后,进行合并连接操作。

Materialized Merge Join

  1. 变化:在PostgreSQL中加入的合并会根据可以扫描外表索引的其他变化,例如嵌套环连接。

vairations

哈希加入:

postgresql中用于天然联接的另一种加入方法和等电量称为哈希联接。为了有效合并两个表的数据,它使用了哈希表。让我们谈谈哈希加入及其执行的变化。

哈希加入执行:

根据表的大小,哈希连接的性能不同。如果内表的大小为25%或更少,则可以直接进行两阶段内存哈希的连接。如果没有,它使用偏斜技术的混合动力哈希。

  1. 内存哈希(
    ) 使用批量哈希表,此技术在work_mem上执行联接操作。该过程由两个阶段组成:构建阶段,在此阶段,将内表元组添加到批处理中,第二阶段是探针阶段,在此期间对每个外表元组进行比较,将其比较到批处理中的内部元组加入。

  2. 混合哈希与偏斜一起:
    当内表的元组无法适合work_mem中的单个批处理时,PostgreSQL使用混合哈希与偏斜技术的使用。它包括一个偏斜的批处理,多个批次和临时批处理文件。在偏斜的批处理中,内部表格存储了,取决于联接条件,将与具有高频值的外表元组合并。

加入访问路径并加入节点:

PostgreSQL中的JOIN PATH结构用作联接访问途径的表示,并且JOIN节点使用这些结构有效地执行JOIN算法。它们是嵌套循环节点,MergeJoinNode和HashJoinNode。

join access paths

注意:阅读previous博客将有助于更好地理解。
此博客是hironobu suzuki撰写的书籍The Internals of PostgreSQL的摘要。