我知道了
- 嵌套连接
- 合并加入
- 哈希连接
作品及其功能。
我想知道在 Postgres 中这些连接是在什么情况下使用的
最佳答案
以下是一些经验法则:
嵌套循环连接如果连接的一侧只有几行,则首选。如果连接条件不使用相等运算符,嵌套循环连接也用作唯一选项。
Hash Joins 如果连接条件使用相等运算符并且连接的两边都很大并且散列适合
work_mem
,则首选。合并联接如果联接条件使用相等运算符并且联接两边都很大,但可以根据联接条件有效地排序(例如,如果有连接列中使用的表达式的索引)。
一个典型的 OLTP 查询只从一个表中选择一行,而从另一个表中选择关联的行,总是使用嵌套循环连接作为唯一有效的方法。
连接具有许多行的表(在连接之前无法过滤掉)的查询对于嵌套循环连接来说效率非常低,并且如果连接条件允许,将总是使用散列或合并连接
优化器会考虑这些连接策略中的每一种,并使用 promise 成本最低的一种。这个决定所依据的最重要的因素是连接双方的估计行数。因此,错误的优化器选择通常是由行数估计错误引起的。
关于postgresql - PostgreSQL 中的嵌套连接与合并连接与哈希连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49023821/