我有一个类似 Facebook 的墙流。所以墙上的元素一定是 friend 相关的,按时间倒序排列。 为了映射它,我有 2 个表:wall_items(id, user_id, [...], created) 和 user_friends(id, from_user_id, to_user_id),每个指定属性都有索引。
我的查询是这样的:
SELECT *
FROM wall_items
INNER JOIN user_friends ON user_friends.from_user_id = wall_items.user_id AND user_friends.to_user_id = "{id of user from whose I want the wall stream}"
ORDER BY wall_items.created DESC
它有时快,有时慢,具体取决于我为指定用户提供的商品数量(越少越好)。我认为这是因为 MySQL 的索引选择不正确,所以我添加了:
FORCE INDEX (created)
现在正好相反,我拥有的元素越多,请求就会越快。
如果我使用 LEFT JOIN 而不是 INNER JOIN,它在所有情况下都很快,但这不是我想要的......
你有什么想法吗? 提前致谢!
最佳答案
据我所知,您对这个有点吃不消。 对于更多记录,您的第一次尝试速度较慢,因为 order by 子句添加了内存排序。
其次通过使用索引摆脱了它,但现在它正在对其进行串行读取并检查其余条件是否匹配。
一个侧面的想法,某种日期范围,即我 friend 最近的消息......
所以你回溯得越远,花费的时间就越长,但有一个隐含的期望,它会......
关于mysql - 正确查询以选择 MySQL 中来自 friend 的所有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8150686/