存储过程或计算列

时间:2015-01-30 15:20:45

标签: sql-server

这是一个什么是最佳实践和最佳表现的问题。

我继承了一个包含涡轮发动机数据的数据库。我找到了20个数据点,这些数据点来自涡轮机的几个磁场。它在过去的方式是创建一个视图来为某些涡轮机提取数据并计算20个数据点中的一些。然后针对相同涡轮机的其他视图但不同的数据点然后针对不同的涡轮机和数据点的其他视图。因此,一遍又一遍地使用相同的方程式。

我想将所有方程式(20个数据点)合并到一个地方。我的争论要么是创建一个用户函数,它将执行所有20次计算,或者将它们创建为表中的计算列。通过一个功能,它可以计算每个涡轮机的全部20个,即使您可能只需要2个或3个视图。但作为计算列,它只会计算视图所提取的列。

1 个答案:

答案 0 :(得分:1)

答案可能是“它取决于”。

做出此决定时的因素包括:

  1. 该列是否具有确定性? (例如,你能不能坚持下去)
  2. 数据插入表格的频率是多少?
  3. 从表中检索数据的频率是多少?
  4. 计算列和特定持久计算列的权衡类似于考虑表上的索引时的权衡。持久化列将增加插入对表执行的时间,但允许更快地进行检索。而在另一端,计算列(不是持久的),或者一个函数,你在插入上会更快,但在检索上会更慢。

    最终解决方案可能取决于表的使用情况(写入和读取的频率) - 这是您需要确定的内容。

    就个人而言,我不会为列做一个函数,而是我会坚持它们,或者写一个完成它们的视图/计算列,具体取决于表中用法的性质。