嵌套加入vs合并加入vs加入加入PSQL

时间:2018-02-28 07:09:05

标签: database postgresql sql-execution-plan

我知道如何

  1. 嵌套加入
  2. 合并加入
  3. 哈希加入
  4. 工作及其功能。

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

1 个答案:

答案 0 :(得分:19)

以下是一些经验法则:

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

  • 如果连接条件使用相等运算符并且连接的两边都很大并且哈希值适合work_mem,则
  • 哈希连接是首选。

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

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

使用嵌套循环连接连接具有多行(在连接之前无法过滤掉)的表的查询效率非常低,如果连接条件允许,总是 使用散列或合并连接它

优化程序会考虑每种连接策略,并使用承诺最低成本的策略。此决策所依据的最重要因素是来自连接两侧的估计行数。因此,错误的优化器选择通常是由行计数中的错误估计引起的。