就存储和性能而言,为基于行中其他字段生成的字段制作计算列是否更好?或者只是在客户端计算这些值而不存储它们? 通常,我们在哪里可以考虑使用计算列作为一种良好的做法?
答案 0 :(得分:0)
一般来说,无论SQL SERVER标记附加到这个问题。
在我看来,你应该避免存储计算值,因为每当某事发生变化(用于计算它的列值)时,你必须重新计算一个新值。可能很难控制它,因为可能有很多方法来访问数据(通过一个应用程序,可能是另一个应用程序,通过数据库的命令行,......),这会导致数据库触发器(如果您的数据库支持他们),因为你可以设置他们在发生变化时开火。这很好,但可能最终得到一个缓慢的响应 - 想象加载数百万行 - 触发器会触发每一个和每一个,计算 某些东西并且 - 因此 - 减慢了事情。
因此,是的 - 我相信您应该在显示层计算它们(例如,报告)。
考虑虚拟列,其值是派生的(并且不存储在磁盘上) - 再次,如果您的数据库支持它们(例如,Oracle)。
另一方面,存储在数据库中的计算值在分析大量 static (不要改变)的数据的数据仓库中是正常的,因此预先计算的值实际上加速了事物起来。
所以,每个选项都有 pro 和 contra - 这取决于你如何使用它。