为了账号安全,请及时绑定邮箱和手机立即绑定

在SQL存储过程或程序中进行计算是否更好?

在SQL存储过程或程序中进行计算是否更好?

C#
拉丁的传说 2021-04-09 21:18:17
我是一家公司的实习生,我本人和我的实习生都负责创建报告仪表板。我们正在使用MVC,API和SQL Server。目前,我们正在使用9种不同的存储过程来获取仪表板的数据。这些存储过程使用聚合函数(例如,某人进行了多少次销售)进行了一些计算,并根据日期范围(以及某些其他过滤器(如产品))进行了过滤。如果将日期范围过滤器设置为一个月,则通常一个存储的proc结果集将返回大约100至200行,这是从数据库中大约7万行的原始数据计算得出的。因此,我们获得了约9个表,每个表有100-200行,以填充仪表板我们的问题是用户可能会更改各种过滤器,这目前需要我们再次从数据库中获取所有九个结果集,并且目前有点慢-刷新大约需要15秒或更长时间我团队中的一名实习生希望更改代码,以便以原始格式(即每个存储的proc数据库中的70 000行)从数据库中调用所有数据,而无需进行过滤,然后应用用户过滤器和C#中的计算。当然,这会删除日期范围过滤器,这意味着将返回databsae中的所有数据,因此,由于数据库已有3年的历史了,因此每个存储的proc不会返回7万行,而是返回约252万行。当然,行的总数每月都会增加。我不知道这是否是个好主意...我不知道它是否会提高性能。所以我基本上有两个主要问题:C#将能够比SQL更快,更有效地运行这些计算(一个人完成了多少销售)将有9个表,每个表中约有250万行数据(且正在计数),每个表都被调用到前端,无论如何都不会导致一切变慢,从而使任何好处都无济于事另一个建议是花时间改善存储过程本身,并更改前端以并行而不是顺序调用那些存储过程,这就是我们现在要做的。答案: 好的,因此在阅读所有回复后,前进的道路似乎是修复那些存储的proc并提高其性能。尽管c#可能会更快地进行计算,但它绝不会弥补移动数据和存储数据所需的资源,并且这些存储的proc不应慢于它们的速度。我们可以使用带有过滤器的c#来实现,但是用SQL来做似乎更好。有没有一种方法可以选择每个人的输入作为答案?
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

用存储过程进行计算是一个好主意。这样可以节省时间。确保没有在一个存储过程中完成所有计算。您可以创建不同的过程,并拥有一个最终过程来合并所有存储过程。此外,您还可以使用函数。利用sql server的属性来发挥自己的优势。存储过程将比在c#中进行计算更快。确保在c#中调用存储过程时设置了超时时间。这非常有帮助,否则您将无法获得预期的结果。


查看完整回答
反对 回复 2021-04-17
  • 1 回答
  • 0 关注
  • 290 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信