始终连接 SQL 表是一种好习惯吗?

Posted

技术标签:

【中文标题】始终连接 SQL 表是一种好习惯吗?【英文标题】:Is it a good practice to always join SQL tables? 【发布时间】:2017-01-24 07:07:38 【问题描述】:

我正在编写一个 Web 应用程序,使用 sequelize 作为我的 SQL 数据库 (PostgreSQL) 的 ORM。 我在 MongoDB 而不是 SQL 数据库方面有更多经验,并且我一直在寻找一种在一个请求中查询完整模型的方法。

假设我有一个UserComment 模型,而User 可能有很多Comments。 我将CommentUser 保存在不同的表中(它们也被分成不同的表)。 当我想查询User 时,是否应该使用join 创建查询以获取 cmets? 在每个查询上执行所有模型关系之间的完全连接是好还是坏的做法?

【问题讨论】:

在表之间进行连接是完全正常的;这就是创建关系数据库的目的。您可以在连接列上添加索引以获得更好的性能。 如果您使用的是 ORM,您认为您应该直接查询数据库吗?让 ORM 处理数据层的查询 - 利用 ORM 并让它完成它的工作。 是的,我当然会利用 orm 并且不会自己编写,但我仍然需要告诉 orm 执行 join。 【参考方案1】:

使用 JOINS,您可以通过一个查询从任意数量的表中准确获取所需的数据,使用您选择的任何搜索参数来过滤结果。 mysql 还可以利用诸如索引之类的东西来最大化性能,而您的 API 代码则不能。

一般来说,执行多个查询并使用某种 API(例如 php)来过滤结果会给服务器带来更多开销。更多的数据必须在 MySQL 和 API 之间来回发送,更不用说 MySQL 是为优化性能而构建的,在处理每个开发人员的 API 代码时无法保证这一点。

所以在你的情况下,加入用户评论。

【讨论】:

以上是关于始终连接 SQL 表是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

在连接模型中验证 ID 是一种好习惯吗?

使用 MongoDB 数据库为每个查询打开一个新连接是一种好习惯吗?

始终使用 this 关键字为(自动)属性添加前缀是不是被认为是一种好习惯?

使用“视图”进行分组是一种好习惯吗?

为模型创建许多 DTO 是一种好习惯吗?

使用引用来布置简单的功能是一种好习惯吗