【发布时间】:2017-08-23 06:48:12
【问题描述】:
我在 MySQL 中的一个查询在执行时花费了太多时间。在这个查询中,我使用 IN 运算符从 MySQL 数据库中获取数据库。
我的查询:
SELECT *
FROM databse_posts.post_feeds
WHERE
post_id IN (SELECT post_id FROM database_users.user_bookmarks where user_id=3) AND
post_date < unix_timestamp();
在这种情况下,两个单独的查询执行所需的时间都非常少,例如
SELECT post_id FROM database_users.user_bookmarks where user_id=3
最多需要大约 400 毫秒
和
SELECT * FROM databse_posts.post_feeds Where post_date < unix_timestamp();
最多需要 300 毫秒
但是使用 IN 运算符将两个查询组合在一起大约需要 6 到 7 秒。 为什么这需要太多时间。 我还编写了不同类型的查询,但所有这些都不会花费那么多时间。
【问题讨论】:
-
关系列有匹配的索引?进行内部连接将减少时间。
-
我想如果你想知道它为什么慢,我们需要看看解释计划输出。如果你只是想要一个更快的解决方案,timo 的答案可能是最完整的