正确查询从MySQL中的朋友中选择所有消息

时间:2011-11-16 11:08:39

标签: mysql database database-design optimization

我有一个喜欢壁纸的Facebook。所以墙上的项目必须与反向时间顺序相关的朋友。 为了映射它,我有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,它在所有情况下都很快但这不是我想要的......

你有什么想法吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,你有点不满这个。 对于更多记录,您的第一次尝试速度较慢,因为order by子句添加了内存排序。

第二个通过使用索引摆脱了这一点,但现在它正在对其进行连续读取并检查其余条件是否匹配。

一个侧面思考,某种日期范围,即我朋友的近期消息......

所以你回去的时间越长,但是会有一种隐含的期望......