我试图在postgresql中优化以下查询
SELECT ci.country_id, ci.ci_id,ci.name
FROM customer c
INNER JOIN address a ON c.a_id = a.a_id
INNER JOIN city ci ON ci.ci_id = a.ci_id列customer.a_id、address.a_id、city.ci_id和adress.ci_id都有一个btree索引。我想使用合并连接,而不是哈希连接,因为我看到哈希连接并不真正使用索引,所以我使用Set enable_hashjoin=off来转换散列联接。
我的查询现在是根据使用合并联接的查询计划进行的,但是它总是在合并连接之前执行快速排序。我知道对于合并,联接的列需要排序,但它们应该已经通过索引进行排序。是否有办法强制Postgres使用索引而不执行排序?

发布于 2022-11-01 23:16:02
你要加入三张桌子。它使用两个合并联接来实现这一点,其中一个合并连接的输出是另一个合并连接的一个输入。中间表使用两个不同的列连接,但不能同时在两个不同的列上排序,因此,如果只使用合并联接,则至少需要一种排序。
这整件事似乎毫无意义,因为查询已经非常快,为什么您关心它是否使用散列连接?
https://stackoverflow.com/questions/74279875
复制相似问题