【发布时间】:2018-02-28 07:09:04
【问题描述】:
我知道了
- 嵌套连接
- 合并加入
- 哈希连接
作品及其功能。
我想知道这些连接在 Postgres 中是在什么情况下使用的
【问题讨论】:
-
请在此处查看我的详细答案:stackoverflow.com/a/10657906/905902(注意:这是针对 Pg8.4,但 基于成本的 查询计划器并没有太大变化)
标签: postgresql sql-execution-plan
我知道了
作品及其功能。
我想知道这些连接在 Postgres 中是在什么情况下使用的
【问题讨论】:
标签: postgresql sql-execution-plan
以下是一些经验法则:
嵌套循环连接是首选,如果连接的一侧有很少的行。如果连接条件不使用相等运算符,则嵌套循环连接也用作唯一选项。
哈希连接是首选如果连接条件使用相等运算符并且连接的两边都很大并且哈希适合work_mem。
合并连接如果连接条件使用相等运算符并且连接的两边都很大,但可以有效地根据连接条件排序(例如,如果有连接列中使用的表达式的索引)。
一个典型的 OLTP 查询只从一个表中选择一行,而从另一个表中选择关联的行,总是使用嵌套循环连接作为唯一有效的方法。
连接具有许多行的表(在连接之前无法过滤掉)的查询对于嵌套循环连接将非常低效,并且如果连接条件允许,将总是使用散列连接或合并连接它。
优化器会考虑这些连接策略中的每一个,并使用承诺成本最低的那个。此决定所基于的最重要因素是连接两侧的估计行数。因此,错误的优化器选择通常是由对行数的错误估计造成的。
【讨论】: