时间变化数据的视图与表的性能

Posted

技术标签:

【中文标题】时间变化数据的视图与表的性能【英文标题】:Performance of Views versus Tables for temporal changing data 【发布时间】:2012-03-06 12:44:46 【问题描述】:

我有一个新闻文章表,其中包含作者、发布时间和每篇文章的字数。该表相当大,包含超过一百万个条目,并且每天以 10.000 个条目的数量增长。

根据这些数据进行统计分析,以确定特定作者在特定时间窗口中发表的总字数(即每天每小时一个、每天一个、每个月)加上一个时间跨度的平均值。这里有两个例子:

作者 A 在 2011 年 11 月 4 日发表了 3298 字,前两个月(从 2011 年 9 月 4 日到 2011 年 11 月 3 日)平均每天发表 943.2 字 作者 B 在 2012 年 1 月 21 日下午 1 点到 2 点之间发表了 435 个词,在之前的 30 天中每天下午 1 点到 2 点平均发表了 163.94 个词

目前的做法是通过 cron-job 在每个定义的时间窗口结束时启动一个脚本,该脚本计算计数和平均值并将其存储在每个时间窗口的单独表中(即每个小时窗口一个,每天一个,每个月一个等等......)。

总和和平均值的计算可以很容易地在 SQL 中完成,所以我认为 Views 可能是一个更优雅的解决方案,但我不知道对性能的影响。

视图是上述问题的适当解决方案吗?

【问题讨论】:

【参考方案1】:

我认为您可以为此使用物化视图。它并没有真正在 mysql 中实现,但您可以使用表来实现它。 Look at

【讨论】:

【参考方案2】:

视图不会等同于您的非规范化。

如果您将汇总数字移动到其他地方,那么您需要支付一定的成本 - 为了保持数据的正确性和一定的好处,即查询时要查看的数据要少得多。

视图将使您不必在每次运行时都对查询进行过多思考,但它仍需要查看原始表中的大量数据。

虽然我不喜欢非规范化,但既然您已经这样做了,我认为该视图无济于事。

【讨论】:

以上是关于时间变化数据的视图与表的性能的主要内容,如果未能解决你的问题,请参考以下文章

MySQL视图

视图_学习笔记

视图和子查询

数据仓库与BI面试常见题目

视图与冗余物理表的查询性能测试

具有大量记录的表的分区视图和性能