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

vin*_*eth 20 postgresql sql-execution-plan

我知道怎么回事

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

工作及其功能.

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

Lau*_*lbe 25

以下是一些经验法则:

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

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

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

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

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

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