php - MySql inner join 需要10多秒

标签 php mysql sql

我有两个表 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/

相关文章:

php - 使用 FPDF 将文件保存到预先指定的目录

sql - 在 sql 中添加额外的列以显示与上一行的比率

mysql - 记住用户详细信息和偏好的最佳结构

php - 将带有另一个搜索查询的变量添加到 MySQL SELECT 语句中

php - 显示过去 3 年中每 3 个月按标记支付的付款

sql - 如何按定义的计数对点进行分组并为每组返回一个边界框?

php - 为什么这个使用 CURL 的函数对某些 URL 有效但对其他 URL 无效?

php - 将 IN 运算符与 pg_prepare 一起使用

php - MySQL/PHP 数据库连接以从 Web 表单输入文本

php - 从数据库返回 0 时替换获取的结果