【发布时间】:2017-06-07 09:08:09
【问题描述】:
对于每个用户,我们的应用程序都会计算一些统计数据,例如他们登录了多少次,或者他们在测验中答错了多少……这可能是各种各样的事情。该应用在 SQL Server 和 .NET Entity Framework 6.1 上运行
目前,统计数据是按需计算的,但随着用户群的增长,这使得应用程序的报告部分变得越来越慢。
我们想知道是使用计算列(持久化或非持久化)还是使用触发器将这些值存储给用户。
你会怎么做呢?在我看来,计算列可能更容易实现,但每次我从表中读取用户时它们都会重新计算,这可能不会比我们现在做的快得多。由于我们会将整个 SQL 查询放入计算列,因此持久化该列似乎也不合适(SQL Server 将如何推断它应该更新计算?)。 触发某些动作似乎更适合我。
为了论证,假设所有计算的统计数据都是其他表中的值的count(*) 和sum(*),没有比这更有趣的了。
【问题讨论】:
-
他们登录了多少次:这是一个不断变化的数字,而 他们在测验中答错了多少次似乎是一个“测验”完成后的静态数字。所以你真的有两种截然不同的情况,可能需要不同的方法。
-
嘿,感谢您的评论,但它们只是两个愚蠢的例子。实际上,它们都是不断变化的数字。
标签: .net sql-server calculated-columns