改善性能postgresql查询
我有3个表格:users
,posts
和likes
。如果帖子在创建后的第一个小时内有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