应用程序性能是否会随着SQL中记录集数量的增加而下降?

本文关键字:增加 记录 是否 性能 SQL 应用程序 | 更新日期: 2023-09-27 18:19:02

我有一个场景,其中sp返回大约30个记录集。如果我减少记录集的数量,那么我必须在c#中编写许多循环来检索数据并将其放入正确的桶中。在SQL中减少记录集的数量并增加c#中的循环和代码复杂性是有益的吗?

应用程序性能是否会随着SQL中记录集数量的增加而下降?

这取决于很多因素,比如

  • webserver和sqlserver之间的网络带宽和延迟
  • 查询的数据种类和数量

通常,减少到数据库的往返次数在性能方面会更好。但是如果你需要检索的数据量非常大,你的应用程序的响应能力可能会下降。

如果不了解应用程序的具体需求,很难判断。

无论您返回30个记录集还是有30个返回相同数据的存储过程,您都必须处理完全相同数量的记录,并且在数据库访问代码中具有完全相同数量的循环。

使用30个记录集的方法会有一点性能上的好处,因为您不必为30个不同的存储过程构建命令并执行它们来检索数据。

但是,我认为对于数据库和应用程序的总体影响,特别是在内存消耗方面,使用30条记录集的方法会更大。使用这种方法,某些东西(SQL Server或应用程序)必须在应用程序代码处理检索到的数据时将其保存在某个地方。如果您使用sp方法,那么在处理过程中的任何给定点保留用于处理的数据通常使用sp方法要小得多。

在数据库并发性和锁定方面还有一个潜在的性能问题。如果在单个sp中检索所有数据,则总体数据检索率可能会降低,因为在继续处理存储进程中的下一组数据之前,必须等待锁被清除。这意味着在更长的时间内消耗更高的内存。使用sp方法,检索可能会阻塞相同的时间,但是平均内存消耗会更低,因为在锁被清除之前,不需要保存已经检索到的数据。

但是,除非您每小时执行数万个事务,或者您的记录集包含千兆字节的数据,否则我认为更改方法不会对您的应用程序产生重大影响,因此您需要从可维护性的角度选择您认为最好的方法。

不确定在什么情况下从一个存储过程返回30个记录集比返回更少的记录集但调用多个存储过程更可取。

这取决于你的应用程序,你是否需要每个数据集中的所有数据。

向数据库添加额外的往返通常会降低性能。但你永远不会知道,直到你尝试(或做一个完整的代码审查)。