PostgreSQL中的嵌套联接vs合并联接vs哈希联接

问题描述 投票:19回答:1

我知道

  1. 嵌套加入
  2. 合并加入
  3. 哈希加入

作品及其功能。

我想知道这些连接在Postgres中使用的情况

postgresql sql-execution-plan
1个回答
22
投票

以下是一些经验法则:

    如果连接的一侧只有几行,则首选
  • 嵌套循环连接。如果联接条件不使用相等运算符,则嵌套循环联接也将用作唯一选项。

  • [Hash Joins如果连接条件使用相等运算符并且连接的两面都很大并且哈希适合work_mem

  • 如果连接条件使用相等运算符并且连接的两面都很大,则首选
  • Merge Joins,但可以有效地对连接条件进行排序(例如,如果表达式上有索引在连接列中使用)。

典型的OLTP查询只从一个表中选择一行,而从另一表中选择相关联的行,总是使用嵌套循环联接作为唯一有效的方法。

使用多行行(不能在连接之前过滤掉的表)连接表的查询在嵌套循环连接中效率很低,并且如果连接条件允许,将总是使用哈希或合并连接。

优化器考虑了所有这些连接策略,并使用了承诺最低成本的策略。该决定所基于的最重要因素是联接两侧的估计行数。因此,错误的优化器选择通常是由行计数估计错误引起的。

© www.soinside.com 2019 - 2024. All rights reserved.