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

我是一家公司的实习生,我本人和我的实习生都负责创建报告仪表板。我们正在使用MVC,API和SQL Server。

目前,我们正在使用9种不同的存储过程来获取仪表板的数据。这些存储过程使用聚合函数(例如,某人进行了多少次销售)进行了一些计算,并根据日期范围(以及某些其他过滤器(如产品))进行了过滤。如果将日期范围过滤器设置为一个月,则通常一个存储的proc结果集将返回大约100至200行,这是从数据库中大约7万行的原始数据计算得出的。因此,我们获得了约9个表,每个表有100-200行,以填充仪表板

我们的问题是用户可能会更改各种过滤器,这目前需要我们再次从数据库中获取所有九个结果集,并且目前有点慢-刷新大约需要15秒或更长时间

我团队中的一名实习生希望更改代码,以便以原始格式(即每个存储的proc数据库中的70 000行)从数据库中调用所有数据,而无需进行过滤,然后应用用户过滤器和C#中的计算。当然,这会删除日期范围过滤器,这意味着将返回databsae中的所有数据,因此,由于数据库已有3年的历史了,因此每个存储的proc不会返回7万行,而是返回约252万行。当然,行的总数每月都会增加。

我不知道这是否是个好主意...我不知道它是否会提高性能。所以我基本上有两个主要问题:

  1. C#将能够比SQL更快,更有效地运行这些计算(一个人完成了多少销售)

  2. 将有9个表,每个表中约有250万行数据(且正在计数),每个表都被调用到前端,无论如何都不会导致一切变慢,从而使任何好处都无济于事

另一个建议是花时间改善存储过程本身,并更改前端以并行而不是顺序调用那些存储过程,这就是我们现在要做的。

答案: 好的,因此在阅读所有回复后,前进的道路似乎是修复那些存储的proc并提高其性能。尽管c#可能会更快地进行计算,但它绝不会弥补移动数据和存储数据所需的资源,并且这些存储的proc不应慢于它们的速度。

我们可以使用带有过滤器的c#来实现,但是用SQL来做似乎更好。

有没有一种方法可以选择每个人的输入作为答案?


拉丁的传说
浏览 305回答 1
1回答

慕桂英3389331

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