mysql - 正确查询以选择 MySQL 中来自 friend 的所有消息

标签 mysql database database-design optimization

我有一个类似 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/

相关文章:

mysql - 在 MySQL 中存储相当大的 JSON 对象的最佳方法是什么

mysql - 管理sql数据库中的位置的最佳方法是什么

php - 如何从数字中删除点?

php - 30 个唯一变量的 SQL 查询

mysql - SQL查询以从表中选择日期范围内仍有空闲容量的所有房间

hadoop - Hadoop 在 N 层架构中的什么位置?

mysql - 触发mysql相关表的插入

php - 重新加载后页面变成空白

php - 如何防止此查询两次打印相同的结果?

php - 在 PHP 中从数据库构造外部类