在IT技术中,是更快地从数据库中一次性获取3000多行数据并在.NET和LINQ中进行操作,还是更快地进行6次调用,每次只获取几百行数据?
这将完全取决于数据库速度、网络带宽和延迟、.NET机器速度、实际查询等因素。
换句话说,我们无法给出真实的一般性答案。我知道这听起来更容易编码 :)
不幸的是,这种事情你很难在没有生产环境的确切副本的情况下有用地测试 - 大多数测试环境与生产环境有所不同,这可能会严重改变结果。
速度只是众多考虑因素之一。
你的代码有多灵活?当需求变化时,修改和扩展有多容易?另一个人阅读和维护你的代码有多容易?你的代码有多可移植?如果你更改到不同的DBMS或不同的编程语言会怎样?这些考虑因素在你的情况下是否重要?
话虽如此,如果其他所有事情都相等或不重要,那就选择单次往返。
你提到单次往返可能会导致读取不需要的数据。如果你需要的所有数据可以在单个结果表中描述,那么应该可以设计一个查询来获取该结果。如果查询非规范化数据,则该结果表可能会以多行形式提供某些结果数据。在这种情况下,通过获取多个结果表并自己组合结果,您可能会获得一些速度优势。
你没有给出足够的信息来知道编写单个查询或编写返回的6个查询数据需要多少编程工作。
正如其他人所说,这取决于情况。
哦,我强烈推荐使用LINQPad(免费)来尝试使用Linq查询。它有很多示例,并且还显示了SQL和Lambda表单,以便您熟悉Linq<->lambda form<->Sql。
如果您预先知道要执行哪6个 SQL 语句,您可以将它们捆绑到一个对数据库的调用中,并使用 ADO 或 ADO.NET 返回多个结果集。
嗯,答案总是“这要看情况”。你想优化数据库负载还是应用程序负载?
在这种情况下,我的一般建议是尽可能在数据库层面使用具体的查询,因此使用6个调用。
谢谢
我有点想法是“大致范围”,但听起来好像是一个选择的事情...差异可能很小。
我认为在 .net 中获取所有数据并进行操作是最好的选择 - 我没有具体的依据(因此提出问题),我只是觉得对数据库的调用是昂贵的,如果我知道我需要所有的数据...就一次性获取它?!?
如果你谈论的是已经由SQL运行(因此由SQL Server优化)的查询,则使用LINQ或SqlDataReader可能实际上具有相同的性能。
唯一的区别将是“维护代码有多难?”
LINQ不会查询任何数据库,直到您使用“.ToList()”、“ToArray()”甚至“.Count()”请求结果。 LINQ动态构建您的查询,因此与运行时验证的SqlDataReader完全相同。
我一直坚持“只带入所需”的原则,没有多余的...但问题是我需要全部内容,只是需要分开显示。
比如说... 我有一个包含userid和typeid的表格。我想要显示所有带有userid的记录,并在页面上按照typeid分别显示。
目前我调用了一个存储过程,执行“select field1, field2 from tab where userid=1”,然后在页面上将网格的数据源设置为“from t in tab where typeid=2 select t;”
而不是调用6次不同的存储过程“select field1, field2 from tab where userid=1 and typeid=2”。
??