虽然问题标题和很多讨论重复,但我没有找到这个问题的答案:
将标准化标签表的简单连接视为
SELECT tags.tag
FROM tags
INNER JOIN tag_map
ON tags.tag_id=tag_map.tag_id
WHERE article_id=xx
JOIN
是否与整个标签表和 tag_map 一起工作,然后过滤创建的(JOIN
ed)表以查找带有 WHERE
子句的行对于文章id
OR JOIN
只会连接 article_id=xx 的 tag_map 表行?
后一种方法应该是相当快的!
最佳答案
它会做前者,据我所知,WHERE 是在生成的 JOINed 表上明确执行的。 (免责声明:MySQL 可能会在某些情况下对此进行优化,我不知道)。
要强制后一种行为并首先执行 WHERE,您可以在 JOIN ON 语句中添加一个额外的过滤器:
SELECT tags.tag
FROM tags
INNER JOIN tag_map
ON tags.article_id=xx
AND tags.tag_id=tag_map.tag_id
WHERE article_id=xx
关于mysql - JOIN 在 MySQL 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093802/