Asp.net 哪个最快?数据检索

Asp.net 哪个最快?数据检索,asp.net,sql,database,linq,Asp.net,Sql,Database,Linq,一次访问数据库并带回3000多行,然后在.net&LINQ中操作它们,是更快一些,还是一次调用6次并带回100行更快一些?这完全取决于数据库的速度、网络带宽和延迟、.net机器的速度、实际查询等 换句话说,我们不能给你一个真实的总体答案。我知道哪些听起来更容易编码:) 不幸的是,如果没有生产环境的精确副本,就无法轻松有效地测试这种情况-大多数测试环境与生产环境有些不同,这可能会严重改变结果。答案总是“视情况而定”。您想在数据库负载还是应用程序负载上进行优化 在这种情况下,我的一般回答是在数据库级

一次访问数据库并带回3000多行,然后在.net&LINQ中操作它们,是更快一些,还是一次调用6次并带回100行更快一些?

这完全取决于数据库的速度、网络带宽和延迟、.net机器的速度、实际查询等

换句话说,我们不能给你一个真实的总体答案。我知道哪些听起来更容易编码:)


不幸的是,如果没有生产环境的精确副本,就无法轻松有效地测试这种情况-大多数测试环境与生产环境有些不同,这可能会严重改变结果。

答案总是“视情况而定”。您想在数据库负载还是应用程序负载上进行优化

在这种情况下,我的一般回答是在数据库级别使用尽可能具体的查询,因此使用6个调用

Thx

我有点想“棒球场”,但听起来好像是一种选择……差别可能很小


我在想,在.net中获取所有数据并进行操作将是最好的-我没有任何具体的依据(因此这个问题),我只是倾向于觉得调用数据库是昂贵的,如果我知道我需要所有数据…一次就得到它

问题的一部分是你没有提供足够的信息给你一个准确的答案。显然,需要考虑现有资源

如果你不经常拉3000行,它可能在短期内对你有用。但是,如果有10000人执行相同的查询(忽略缓存效果),这可能会成为应用程序和数据库的问题


现在,在类似分页的情况下,将所需内容拉进去是有意义的。但这将是一个普遍的规则,试图只拉什么是必要的。用手术刀比用大刀要优雅得多

如果您谈论的是已经由SQL运行的查询(由SQL Server优化),那么使用LINQ或SqlDataReader实际上可能具有相同的性能

唯一的区别是“维护代码有多难?”


在使用“.ToList()”或“.ToArray()”甚至“.Count()”请求结果之前,LINQ不会向数据库查询任何内容。LINQ正在动态构建您的查询,因此它与SqlDataReader完全相同,但具有运行时验证。

我始终坚持“引入我需要的内容”的规则,仅此而已……我这里的问题是我需要所有内容,我只需要单独显示它

所以说。。。 我有一个带有userid和typeid的表。我想用一个userid显示所有记录,并在页面上以网格显示,比如用typeid分隔

此时,我调用执行“从userid=1的选项卡中选择field1、field2”的存储过程, 然后在页面上,在typeid=2的选项卡中将网格的数据源设置为fromt,并选择t

而不是调用不同的存储过程“从userid=1和typeid=2的选项卡中选择field1、field2”6次


??

与其猜测,不如两种方法都试一下,然后衡量结果

这是针对一个用户的,还是将有多个用户查询数据?单个数据库调用在负载下可以更好地扩展。

速度只是众多考虑因素中的一个

你的代码有多灵活?当需求发生变化时,修改和扩展有多容易?另一个人阅读和维护您的代码有多容易?你的代码的可移植性如何?如果您更改为不同的DBMS或不同的编程语言,该怎么办?在您的案例中,这些考虑因素是否重要

话虽如此,如果所有其他事情都相同或不重要,那么就选择单程往返

您提到,单次往返可能会导致读取不需要的数据。如果您需要的所有数据都可以在一个结果表中描述,那么应该可以设计一个查询来获得该结果。如果查询对数据进行非规范化处理,该结果表可能会在多行中传递一些结果数据。在这种情况下,您可以通过获取多个结果表中的数据并自己合成结果来提高速度

您没有提供足够的信息来了解编写单个查询或编写6个查询返回的数据需要多少编程工作量

正如其他人所说,这要视情况而定

我这里的问题是,我需要它的全部,我只需要它单独显示

您的问题的答案是,3000行1次查询比500行6次查询要好。(考虑到您要将所有3000行都带回来)

但是,您不可能一次显示3000行,是吗?很有可能,不管使用Linq,您都希望运行聚合查询并让数据库为您完成工作。您应该能够构造SQL(或Linq查询)以一次性执行所有必需的逻辑

不知道你在做什么,很难说得更具体

*如果您确实需要返回所有行,那么请研究linq IQueryable的ToLookup()方法。它非常方便以非标准方式对结果进行分组


哦,我强烈推荐(免费)使用Linq尝试查询。它有大量的示例,还向您展示了sql和lambda表单,以便您熟悉Linqlambda formSql。

如果您事先知道要执行的6条sql语句,您可以将它们绑定到对数据库的一次调用中,并使用ADO或ADO.NET返回多个结果集

视情况而定

1) 如果您的连接器实现预切了很多对象,并且您有大行(例如BLOB、contry多边形等),那么您就有问题了,您必须向下切