我是一家公司的实习生,我本人和我的实习生都负责创建报告仪表板。我们正在使用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来做似乎更好。
有没有一种方法可以选择每个人的输入作为答案?
慕桂英3389331
相关分类