【发布时间】:2016-08-08 05:54:51
【问题描述】:
有两个表:posts(~5,000,000 行)和relations(~8,000 行)。
posts 列:
-------------------------------------------------
| id | source_id | content | date (int) |
-------------------------------------------------
relations 列:
---------------------------
| source_id | user_id |
---------------------------
我编写了一个 MySQL 查询从posts 获取与特定用户相关的 10 条最新行:
SELECT p.id, p.content
FROM posts AS p
LEFT JOIN relations AS r
ON r.source_id = p.source_id
WHERE r.user_id = 1
ORDER BY p.date DESC
LIMIT 10
但是,执行它需要大约 30 秒。
我已经在relations 为(source_id, user_id)、(user_id) 和(source_id)、(date)、(date, source_id) 在posts 有索引。
EXPLAIN 结果:
如何优化查询?
【问题讨论】:
-
请注意,这呈现为内部连接!
-
尝试用 AND 替换 WHERE。
-
请发布“EXPLAIN SELECT ...”的结果
-
再想一想,您可能需要一个单独的 r.user_id 索引并选择 FROM 关系和 LEFT JOIN 帖子
-
@JanPapenbrock 将 WHERE 替换为 AND 返回与用户无关的结果。在帖子中添加了 EXPLAIN 结果。
标签: mysql join left-join query-performance