postgresql - PostgreSQL 中的嵌套连接与合并连接与哈希连接

标签 postgresql sql-execution-plan

我知道了

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

作品及其功能。

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

最佳答案

以下是一些经验法则:

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

  • Hash Joins 如果连接条件使用相等运算符并且连接的两边都很大并且散列适合 work_mem,则首选。

  • 合并联接如果联接条件使用相等运算符并且联接两边都很大,但可以根据联接条件有效地排序(例如,如果有连接列中使用的表达式的索引)。

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

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

优化器会考虑这些连接策略中的每一种,并使用 promise 成本最低的一种。这个决定所依据的最重要的因素是连接双方的估计行数。因此,错误的优化器选择通常是由行数估计错误引起的。

关于postgresql - PostgreSQL 中的嵌套连接与合并连接与哈希连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49023821/

相关文章:

postgresql - psql 似乎无法正常工作

postgresql - 在 Postgres 中获取本周星期一的日期?

sql - POSTGRESQL:创建表作为选择特定类型的列

sql-server - SQL Server 中是否缓存了函数的执行计划?

c# - 如何使用 LINQ to SQL/ADO.NET 获取执行计划

php - 带有 PGSQL_CONNECT_FORCE_NEW 标志的 pg_connect

sql - 大量的 Oracle I/O,即使只提取了一条记录

postgresql - 添加 limit 子句后,Insert-select 得到更好的计划

sql - 删除查询非常慢

Postgresql search_path 问题