联接是懒人用的吗?

2022-08-31 07:03:16

我最近与另一位开发人员进行了讨论,他向我声称JOIN(SQL)是无用的。这在技术上是正确的,但他补充说,使用联接比在代码中发出多个请求和链接表(C#或Java)效率低。

对他来说,加入是为那些不关心表现的懒惰的人准备的。这是真的吗?我们是否应该避免使用联接?


答案 1

不,我们应该避免那些持有如此令人难以置信的错误意见的开发人员。

在许多情况下,数据库联接比通过客户端执行的任何操作都快几个数量级,因为它避免了数据库往返,并且数据库可以使用索引来执行联接。

在我的脑海中,我甚至无法想象一个场景,其中正确使用的联接会比等效的客户端操作慢。

编辑:在极少数情况下,自定义客户端代码可以比简单的数据库联接更有效地完成工作(请参阅 meriton 的注释)。但这是个例外。


答案 2

在我看来,你的同事在无sql文档数据库或键值存储方面做得很好。这些本身就是非常好的工具,非常适合许多问题。

但是,关系数据库针对使用集进行了大量优化。基于联接查询数据的方法有很多很多,这些方法比许多往返行程要高效得多。这就是rdbms的多功能性的来源。您也可以在 nosql 存储中实现相同的目标,但您通常最终会构建一个适合每种不同性质的查询的单独结构。

简而言之:我不同意。在 RDBMS 中,联接是基础。如果您没有使用它们,则不会将其用作RDBMS。


推荐