我有两个表 posts 和 followings
posts (id,userid,post,timestamp) 30 000 rows
和
followings(id_me,userid) 90 000 rows
我想根据我关注的人和我的帖子从帖子表中获取最新的 10 篇帖子
SELECT p.*
FROM posts as p INNER JOIN
followings as f
ON (f.id_me=(my user id) AND p.userid=f.userid )
OR
p.userid=(my user id)
ORDER BY id DESC LIMIT 10
但返回需要大约 10-15 秒。提前致谢!
最佳答案
首先,从连接子句中删除过滤器,让连接只关联连接表。
(
SELECT p.*
FROM posts as p
INNER JOIN followings as f ON p.userid=f.userid
where f.id_me=(my user id)
UNION
SELECT p.*
FROM posts as p
where p.userid=(my user id)
)
ORDER BY id DESC LIMIT 10
其次,如果 id 没有索引,请验证您的索引,它会对两个表的每个笛卡尔积执行全表扫描(30k x 90k =~ 3700k 对进行比较)
第三,如果你不关注你自己,你需要将你关注的帖子和你的帖子结合起来
关于php - MySql inner join 需要10多秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21786447/