gpt4 book ai didi

postgresql - Postgres 在创建查询计划时不使用 HASH 索引

转载 作者:行者123 更新时间:2023-12-05 05:22:57 28 4
gpt4 key购买 nike

我在表 t_posts 的列 topics_id 上创建了一个HASH 索引,它是表 t_topics

中的主键
select * FROM t_topics
JOIN t_posts ON t_topics.topics_id = t_posts.topics_id

当我执行上面的查询时生成的计划

Hash Join  (cost=12258.02..346305.42 rows=1813743 width=520)
Hash Cond: (t_posts.topics_id = t_topics.topics_id)
-> Seq Scan on t_posts (cost=0.00..114209.43 rows=1813743 width=408)
-> Hash (cost=5939.12..5939.12 rows=217112 width=112)"
-> Seq Scan on t_topics (cost=0.00..5939.12 rows=217112 width=112)

enter image description here

计划应该按顺序扫描 t_topics 并在 t_posts 上使用 HASH 索引获取 t_topics 并执行 JOIN。为什么查询计划会这样生成?

最佳答案

此索引仅在嵌套循环连接中有帮助,但规划器选择执行散列连接,其中连接条件上的索引没有帮助。< br/>从行数估计来看,我认为规划器是正确的。

您可以通过将 enable_hashjoinenable_mergejoin 设置为 off 并重试来检查您的索引是否可以被嵌套循环连接使用。

关于postgresql - Postgres 在创建查询计划时不使用 HASH 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220920/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com