这次我得到了一个更普遍的问题。如果原始数据定期更新,我应该使用多个视图而不是存储过程来加权数据汇总吗?
基本上我有一个本地MySQL数据库,它通过从更大的事务数据库导入相同类型的数据(表)来定期更新。
本地数据库用于统计分析。因此,我在本地对数据进行去标准化(基本上是聚合)以用于统计软件包。到目前为止,我使用了存储过程,因为当加权方案(基本上包含与变量相乘的权重的其他表)发挥作用时,我觉得它更容易处理(并且更清楚地安排)。
虽然存储过程的缺点是我在使用新数据填充表时再次运行所有的em。显然我不是DBA ......所以不要回避陈述明显的:)处理这种情况的最佳方法是什么? SP还是意见?还是完全不同的东西?
对于任何提前建议,请等等!答案 0 :(得分:1)
这取决于(这是任何“一般”问题的通用答案,不是吗?:))。您需要评估权衡,以确定最适合您需求的解决方案。
Views基本上只是查询重写(在MySQL中),因此使用视图将在每次运行查询时执行聚合/非规范化。这可能会使您的查询速度变慢。此外,如果您的程序非常复杂,那么尝试将该逻辑放入视图中可能并不实际。
Stored procedures一次完成工作,因此查询会更快。但是,您的更新将不会自动显示。所以我认为答案取决于数据更改的频率,运行查询的频率以及查询性能的重要程度。
至于替代建议,您还可以使用events运行存储过程,如果您的数据更新是常规的,并且您只是试图将自己从执行过程的手动任务中解脱出来。
另一种选择是使用triggers更新非规范化/聚合表。当您在源表中更新数据时,触发器将自动使聚合表保持最新状态。
Here是指向存储过程,视图,触发器和事件的文档的链接。