mysql - mysql 外键空时是否会发生连接

标签 mysql join

假设我有 postspost_tagspost_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 JOINLEFT 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/

相关文章:

mysql - 使用单个 SQL 连接语句从多个 MySQL 表添加条目,但前提是第二个表中有可用条目

根据单独表中的观察结果连接两个表(在 EG 中)?

sql - 带有连接的 Postgresql 更新

node.js - 根据条件加入mongodb集合

mysql - 正在安装 MySQL 系统表...错误 : 1136 Column count doesn't match value count at row 1?

mysql - SQL连接请求

mysql - mysql中3个表的内连接

MySQL 多重连接速度慢

php - 此 php 代码中是否存在任何漏洞/可能的优化以检测是否需要验证码?

MySQL 插入转换