【发布时间】:2020-12-23 19:14:49
【问题描述】:
我正在构建一个社交订阅源,就像 Twitter 一样。
我有一张posts、users 和followers 的表格。
我的目标是优化提要查询,以获取您关注的用户的所有帖子并按新近度排序。
查询看起来像:
SELECT * from posts inner join followers on followers.user_id = posts.user_id
where followers.followed_by_id = {authenticatedUser.id}
order by posts.created_at DESC
但是,我无法让索引同时适用于 JOIN 和 ORDER BY。使这个查询规模化的理想查询和索引设置是什么?
我们有数十万个users 和数百万个posts。
提前致谢!
【问题讨论】:
-
我们有成千上万的用户和数百万的帖子 - 也许考虑比“所有用户从一开始就发布所有帖子,然后是用户 X “?或许也可以减轻数据库排序数据的负担
-
为
followers (followed_by_id, user_id)建立一个简单的索引应该会有很大帮助。 -
@slaakso 没有帖子?
-
无法让索引为 ... ORDER BY 工作 - 我不太明白它会有什么帮助,因为无论如何你都是
select *ing ,因此任何将查询优化为“从索引中回答而不命中表”的可能性都会丢失,并且需要驱动顺序的数据在结果集中。我建议您更仔细地考虑您真正需要检索的数据 -
嗯?
activities哪里来的?
标签: mysql indexing database-design