我有一个场景,其中sp返回大约30个记录集。如果我减少记录集的数量,那么我必须在C#中编写许多循环来检索数据并将其放入正确的存储桶中。减少SQL中的记录集数量并增加C#中的循环和代码复杂度是否有益?
答案 0 :(得分:1)
这取决于许多因素,如
通常它在性能方面更好,以减少到数据库的往返次数。但是,如果您需要检索的数据量非常大,则应用程序的响应性可能会降低。
如果不了解您应用的具体需求,很难说清楚。
答案 1 :(得分:1)
无论是返回30个记录集还是有30个返回相同数据的存储过程,您都必须处理完全相同数量的记录并在数据库访问代码中具有完全相同数量的循环。
30记录集方法会有轻微的性能优势,因为您不必构建命令并执行30个不同的存储过程来检索数据。
但是,我相信使用30记录集方法对数据库和应用程序的总体影响,特别是在内存消耗方面,将会更大。使用这种方法,某些东西(SQL Server或您的应用程序)必须在您的应用程序代码处理它时将检索到的数据保留在某处。如果使用sp方法,那么使用sp方法在处理过程中任何给定点保存的数据通常会小得多。
在性能方面,数据库并发和锁定也存在潜在问题。如果检索单个sp中的所有数据,则由于必须等待锁定清除才能继续处理存储过程中的下一组数据,因此整体数据检索率可能会降低。这意味着更长的时间内更高的内存消耗。使用sp方法,检索可能会阻塞相同的时间,但内存消耗平均会更低,因为在锁定已清除之前,某些东西不必保留已检索的数据。
但是,除非您每小时执行数万个事务或者您的记录集包含数十亿字节的数据,否则我认为更改方法不会对您的应用程序产生重大影响,因此您需要选择自己的从可维护性的角度来看,这是最好的。
答案 2 :(得分:0)
不确定在什么情况下从一个存储过程返回30个记录集比返回更少记录集但是调用多个存储过程更合适。
答案 3 :(得分:0)
这实际上取决于您的应用程序,您是否需要来自每个数据集的所有数据。
向数据库添加额外的往返通常会降低性能。但是在你尝试(或进行完整的代码审查)之前,你永远不会知道。