我有3个表:帖子,标签,* posts_tags *。我想列出帖子以及与之关联的所有标签,但要限制结果。
这就是我现在所做的:
SELECT
p.*,
t.*
FROM
(
SELECT * FROM posts LIMIT 0, 10
) as p
LEFT JOIN
posts_tags as pt
ON pt.post_id = p.post_id
LEFT JOIN
tags as t
ON t.tag_id = pt.tag_id
工作正常,但似乎有点慢......
有更好/更快的方法吗?我可以在其他地方申请LIMIT以获得更好的结果吗?
编辑:我想限制帖子,而不是结果。帖子可以有很多标签。
答案 0 :(得分:1)
SELECT
p.*,
t.*
FROM
posts as p
LEFT JOIN
posts_tags as pt
ON pt.post_id = p.post_id
LEFT JOIN
tags as t
ON t.tag_id = pt.tag_id
LIMIT 0, 10
应该工作;)
修改强>
MySQL在运行多个连接时速度很慢,在我看来最好将查询分成两个,然后将结果加入到您的应用程序代码中(应用程序开销不应该太大,因为它只有10个结果)。
答案 1 :(得分:1)
尝试使用前面的EXPLAIN关键字运行查询:
EXPLAIN SELECT ...
这将为您提供有关MySQL如何执行查询的信息。也许你错过了某个地方的钥匙或索引。以下是如何读取EXPLAIN的结果: http://dev.mysql.com/doc/refman/5.5/en/explain-output.html
答案 2 :(得分:1)
您是否尝试过将限制子查询移到where子句:
SELECT
p.*,
t.*
FROM
posts as p
LEFT JOIN
posts_tags as pt
ON pt.post_id = p.post_id
LEFT JOIN
tags as t
ON t.tag_id = pt.tag_id
WHERE
p.post_id in (select post_id from post limit 0,10)