【发布时间】:2010-02-23 15:55:41
【问题描述】:
在我的应用程序中,我有一个应用程序事件表,用于生成用户特定的应用程序事件源。因为它是使用 OR 查询生成的,所以我担心这个频繁使用的查询的性能,并且想知道我是否处理错了。
在应用程序中,用户可以关注其他用户和组。当执行一个动作(例如,创建一个新帖子)时,将创建一个feed_item 记录,其中actor_id 设置为用户的ID,subject_id 设置为执行该操作的组ID,并且actor_type 和 subject_type 设置为模型的类名。由于用户可以同时关注组和用户,因此我需要生成一个同时检查 actor_id 和 subject_id 的查询,并且它需要选择不同的记录以避免重复。因为它是一个 OR 查询,所以我不能使用普通索引。而且由于每次执行操作时都会创建一条记录,因此我希望该表很快就会有很多记录。
这是当前查询(following 表将用户连接到 feeders,也就是用户和组)
SELECT DISTINCT feed_items.* FROM "feed_items"
INNER JOIN "followings"
ON (
(followings.feeder_id = feed_items.subject_id
AND followings.feeder_type = feed_items.subject_type)
OR
(followings.feeder_id = feed_items.actor_id
AND followings.feeder_type = feed_items.actor_type)
)
WHERE (followings.follower_id = 42) ORDER BY feed_items.created_at DESC LIMIT 30 OFFSET 0
所以我的问题:
由于这是一个频繁使用的查询,这里是否存在性能问题?
有什么明显的方法可以简化或优化我所缺少的吗?
【问题讨论】:
标签: sql database performance postgresql