是否使用空外键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:WhatJOIN
?SQL中有不同类型的JOIN
。问题2:这取决于你想要什么。结论:请发布您的表格结构以及您的全部问题(即您试图实现的目标),而不是过早优化。请参阅。