改善性能postgresql查询

我有3个表格:users,postslikes。如果帖子在创建后的第一个小时内有5个以上的喜欢,则该帖子被称为热帖。以下是用于查询热门帖子的列表。任何人都可以帮助我改进这个查询(如何索引或重写它)。改善性能postgresql查询

SELECT post.id, 

post.content,

user.username,

COUNT(like.id)

FROM posts AS post

LEFT OUTER JOIN users AS user

ON post.user_id = user.id

INNER JOIN likes AS likes

ON post.id = likes.post_id

AND likes.created_at - INTERVAL '1 hour' < post.created_at

GROUP BY post.id, user.username

HAVING COUNT(like.id) >= 5

ORDER BY post.created_at DESC;

回答:

首先,除非实际上可能有不属于用户的帖子,否则使用内部联接。

假设有大量的帖子和喜欢,最好的连接策略是合并连接或散列连接,PostgreSQL应该自动选择。

对于合并连接,下面的指标可能会有所帮助:

CREATE INDEX ON posts (id); 

CREATE INDEX ON likes (post_id);

号指数可以用哈希帮助在这种情况下加入。

... AND likes.created_at < post.created_at + INTERVAL '1 hour' 

和创建像

CREATE INDEX ON likes (post_id, created_at); 

以上是 改善性能postgresql查询 的全部内容, 来源链接: utcz.com/qa/259453.html

回到顶部