Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加入是为懒惰的人准备的?_C#_Java_Sql_Join - Fatal编程技术网

C# 加入是为懒惰的人准备的?

C# 加入是为懒惰的人准备的?,c#,java,sql,join,C#,Java,Sql,Join,我最近与另一位开发人员进行了讨论,他向我声称连接(SQL)是无用的。这在技术上是正确的,但他补充说,使用连接比在代码(C#或Java)中生成多个请求和链接表效率低 对他来说,加入是为了那些不在乎表现的懒人。这是真的吗?我们应该避免使用联接吗?嗯,一般情况下,他是错的 在优化器提示、表索引、外键关系和其他可能的数据库供应商特定信息的帮助下,数据库能够使用各种方法进行优化。Ummm,连接是关系数据库如何将表相互关联的。我不知道他在说什么 对数据库进行多次调用如何比一次调用更有效?另外,sql引擎在做

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


对他来说,加入是为了那些不在乎表现的懒人。这是真的吗?我们应该避免使用联接吗?

嗯,一般情况下,他是错的


在优化器提示、表索引、外键关系和其他可能的数据库供应商特定信息的帮助下,数据库能够使用各种方法进行优化。

Ummm,连接是关系数据库如何将表相互关联的。我不知道他在说什么

对数据库进行多次调用如何比一次调用更有效?另外,sql引擎在做这类事情时进行了优化


也许你的同事懒得学SQL。

如果“懒人”被定义为想写更少代码的人,那么我同意。如果“懒惰”被定义为想让工具做他们擅长的事情的人,我同意。因此,如果他只是同意拉里·沃尔的观点(关于优秀程序员的属性),那么我同意他的观点。

如果没有连接,您将如何将订单项目与订单联系起来? 这就是关系数据库管理系统的全部要点。 没有连接就没有关系数据,您也可以使用文本文件 处理数据

听起来他不理解这个概念,所以他试图让人觉得它们是无用的。他是那种认为excel是数据库应用程序的人。
打他一巴掌,告诉他多读一些关于数据库的知识。建立多个连接、提取数据并通过C#合并数据是错误的做法。

不,我们应该避免开发人员持有如此错误的观点

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

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

编辑:在一些罕见的情况下,自定义客户端代码比直接的DB连接更有效(请参见meriton的评论)。但这是个例外。

不,你不应该这样

数据库是专门为操作数据集而设计的(显然……)。因此,他们在这方面的效率令人难以置信。通过在自己的代码中执行本质上是手动连接的操作,他正试图接管专门为该工作设计的角色。他的代码能够像数据库中的代码一样高效的可能性微乎其微


顺便说一句,没有连接,使用数据库有什么意义?他也可以只使用文本文件。

不,连接不仅在数据库代码中得到了更好的优化,而且特别是C#/Java;但通常可以应用几种过滤技术,从而产生更好的性能。

他肯定是错的。虽然在C#或Java等语言中进行数据操作肯定有好处,但由于SQL本身的性质,连接在数据库中的速度最快

SQL一直在详细说明有关数据的统计信息,如果您正确创建了索引,就可以很快在数百万条记录中找到一条记录。除了这样一个事实之外,当您可以在数据库级别正确地进行连接时,为什么要将所有数据拖到C#中进行连接呢


当你需要迭代地做一些事情时,使用C#的优点就开始发挥作用。如果您需要为每一行执行一些函数,那么在C#中这样做可能会更快,否则,连接数据在数据库中会得到优化。

我工作的上一家公司也没有使用SQL连接。取而代之的是,他们将这项工作转移到了应用层,应用层的设计是水平扩展的。这种设计的基本原理是避免在数据库层工作。通常是数据库成为瓶颈。复制应用程序层比复制数据库更容易。可能还有其他原因。但这是我现在能回忆起来的

是的,我同意在应用层进行的连接比数据库进行的连接效率低。更多的网络交流也


请注意,在避免SQL联接方面,我并没有采取强硬立场

在我看来,如果没有sql文档数据库或键值存储,您的同事会做得很好。它们本身就是非常好的工具,非常适合解决许多问题

但是,关系数据库在使用集合时进行了大量优化。有很多很多基于连接的数据查询方法,它们比很多往返要高效得多。这就是rdbms的通用性的来源。您也可以在nosql存储中实现同样的功能,但是您通常会构建一个适合于不同查询性质的单独结构


简言之:我不同意。在RDBMS中,联接是基本的。如果您没有使用它们,那么您就没有将其用作RDBMS

我不理解语句“SQL中的连接是无用的”的逻辑。 在处理数据之前过滤和限制数据有用吗?正如其他响应者所说,这是数据库引擎所做的,应该是他们擅长的

也许一个懒惰的程序员会坚持使用他们熟悉的技术,并出于非技术原因而回避其他可能性


我将由您来决定。

我会说,我遇到了一种情况,在这种情况下,分解查询并在代码中进行连接会更快。也就是说,只有一个特定版本的MySQL我才能做到这一点。除此之外,数据库可能会更快(请注意,您可能需要优化查询,但它仍然会更快)。

我怀疑他对什么内容的看法有限
for each (invoice in invoices)
    let invoiceLines = FindLinesFor(invoice)
...
select t1.field1 
from table1 t1
join table2 t2 
    on t1.id = t2.id
where t1.field2 = 'test'