假设我有 posts
、post_tags
和 post_categories
表。在帖子页面上,我从 url 中获取 id,并需要通过关联的表查找帖子的信息。标签和类别是可选的,因此,有些帖子既没有标签,也没有类别。
Q1 如果帖子在 post_tags 和 post_categories 表中没有匹配的行,那么与存在的行相比,联接是否会“发生”,并且会具有相同的资源使用情况吗?
Q2 如果发生联接,如果我进行第一个查询,采用帖子的类型,这是更好的做法吗?因为我可以从类型中检查它是否有标签和/或类别或没有,那么是否可以选择进行联接查询,或者只是查找帖子的信息,甚至无需尝试联接到其他表? 我认为,虽然进行一个查询并获取所有数据比进行多个查询更好,但也许第一个查询找出确切的类型,对于没有标签和/或帖子的帖子,数据库上的负载会更少。
posts 表大约有几百万行。
编辑
我正在做 LEFT JOIN
表格结构
posts table
id, title, content
post_categories
id, post_id, category_id,
post_tags
id, post_id, tag_id,
categories
id, name
tags
id, name
谢谢
最佳答案
我使用的 JOIN 有 2 种类型,涵盖了所有场景:INNER JOIN
和 LEFT JOIN
。
INNER JOIN
要求ON
验证为 true,否则将从结果中删除该行LEFT JOIN
不需要ON
验证为 true,但会将失败表的列视为NULL
就您而言,我最有可能使用LEFT JOIN
,并在标签和类似内容为NULL
或不为NULL
时采取相应的操作。
将 FROM
表放置在您知道将会有行的位置。例如,不要使用 FROM 标记
,因为一切都将基于可能并不总是存在的行。
关于mysql - mysql 外键空时是否会发生连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066362/