Amazon Redshift 查询计划的 EXPLAIN 联接 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Redshift 查询计划的 EXPLAIN 联接

Amazon Redshift 使用不同的联接运算符根据以下各项检索数据:

  • 所联接表的物理设计

  • 查询的结构

  • 联接所需数据的位置

  • 查询本身的具体要求

Amazon Redshift 中常用的联接类型如下:

  • 嵌套循环:当无法在两个表之间创建哈希表时,就会出现嵌套循环。嵌套循环主要用于交叉联接(笛卡尔乘积)和一些不等式联接。这将要求数据库将左表中的每个值与右表中的每个值进行对比。嵌套循环联接的复杂性是“平方级”的,因为必须执行约 N*N(或 N²)次不同的操作才能处理联接。嵌套循环是效率最低的联接类型。

  • 哈希联接:在哈希联接中,联接条件并非彼此完全匹配,但 Amazon Redshift 只需稍作处理即可使用哈希联接管理。哈希联接通常比嵌套循环联接更快。Amazon Redshift 会查看两个表,并在它们之间创建一个哈希表(类似于位于两个表中间的查找表)。例如,如果联接列并非同时为分配键和排序键,联接表时可使用哈希联接和哈希运算符。

  • 合并联接:合并联接通常是最快的联接,用于内部联接和外部联接。在合并联接中,两个表彼此完全匹配。这意味着两侧的联接条件是分配键和排序键。两个表完美对齐,无需任何调整。请注意,表中未排序的行应少于联接表的 20%。要查看未排序行的百分比,请查询 SVV_TABLE_INFO 系统表。合并联接不用于完全联接。