是否使用空外键mysql进行连接

是否使用空外键mysql进行连接,mysql,join,Mysql,Join,假设我有posts,post\u标签,和post\u类别表。在帖子的页面上,我从url获取id,并需要找到帖子的信息以及相关的表。标记和类别是可选的,因此,有些帖子既没有标记,也没有类别 Q1如果post在post_标记和post_类别表中没有匹配的行,那么与这些行是否存在相比,联接是否会“发生”,并且它是否具有相同的资源使用率 Q2如果连接发生,那么我是否会进行第一次查询,以帖子的类型作为第一次查询更好,因为我可以从类型中检查帖子是否有标签和/或类别,因此可以选择进行连接查询,或者只查找帖子的

假设我有
posts
post\u标签
,和
post\u类别
表。在帖子的页面上,我从url获取id,并需要找到帖子的信息以及相关的表。标记和类别是可选的,因此,有些帖子既没有标记,也没有类别

Q1如果post在post_标记和post_类别表中没有匹配的行,那么与这些行是否存在相比,联接是否会“发生”,并且它是否具有相同的资源使用率

Q2如果连接发生,那么我是否会进行第一次查询,以帖子的类型作为第一次查询更好,因为我可以从类型中检查帖子是否有标签和/或类别,因此可以选择进行连接查询,或者只查找帖子的信息而不尝试连接到其他表? 我认为,尽管有一个查询并获取所有数据比进行多个查询要好,但如果第一个查询找到确切的类型,那么对于没有标记和/或post的post,数据库的负载会更少

posts表大约有几百万行

编辑

我在做左路连接

表结构

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

谢谢

我在所有场景中都使用两种类型的联接:
内部联接
左联接

  • 内部联接
    要求验证上的
    为true,否则将从结果中删除该行
  • LEFT JOIN
    不要求验证上的
    为true,但会将失败表的列视为
    NULL
在您的情况下,如果标记和类似的标记是
NULL
,我很可能会使用
LEFT JOIN
,并相应地采取行动

FROM
表中的
放在您知道会有行的位置。例如,不要使用来自标记的
,因为所有内容都基于可能并不总是存在的行。

Q1:What
JOIN
?SQL中有不同类型的
JOIN
。问题2:这取决于你想要什么。结论:请发布您的表格结构以及您的全部问题(即您试图实现的目标),而不是过早优化。请参阅。