1

这次我有一个更普遍的问题。如果原始数据定期更新,我应该使用多个视图而不是存储过程来进行数据加权聚合吗?

基本上我有一个本地 MySQL 数据库,它通过从更大的事务数据库中导入相同类型的数据(表)来定期更新。

本地数据库用于统计分析。因此,我在本地对数据进行去规范化(基本上是聚合),以便与统计软件包一起使用。到目前为止,我使用了存储过程,因为我觉得当加权方案(基本上是其他包含与变量相乘的权重的表)发挥作用时,它更容易处理(并且安排得更清楚)。

尽管存储过程的缺点是,当表中填充了新数据时,我会再次运行所有这些程序。显然我不是 DBA ......所以不要回避陈述显而易见的事情 :) 处理这种情况的最佳方法是什么?SP 还是意见?还是完全不同的东西?

thx 提前提出任何建议!

4

1 回答 1

1

这取决于(这是任何“一般”问题的通用答案,不是吗?:))。您需要评估权衡,以了解最适合您需求的解决方案。

视图基本上只是查询重写(在 MySQL 中),因此每次运行查询时使用视图都会执行聚合/非规范化。这可能会使您的查询速度比您希望的要慢。此外,如果您的程序真的很复杂,那么尝试将该逻辑放入视图中可能是不切实际的。

存储过程只做一次工作,因此查询会更快。但是您的更新不会自动显示。所以我认为答案取决于数据变化的频率、查询的运行频率以及查询性能的重要性。

至于替代建议,您也可以使用events运行存储过程,如果您的数据更新是定期的,并且您只是试图将自己从运行过程的手动任务中解脱出来。

另一种选择是使用触发器更新非规范化/聚合表。当您更新源表中的数据时,触发器将自动使聚合表保持最新。

是存储过程、视图、触发器和事件的文档链接。

于 2010-07-12T18:38:32.030 回答