Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 聚合查询的视图或存储过程? 我目前有一个600000000行的表。 对于我的报告应用程序,我希望通过使用GROUPBY子句对数据执行每日平均值来减少行数。_Mysql_Mariadb - Fatal编程技术网

Mysql 聚合查询的视图或存储过程? 我目前有一个600000000行的表。 对于我的报告应用程序,我希望通过使用GROUPBY子句对数据执行每日平均值来减少行数。

Mysql 聚合查询的视图或存储过程? 我目前有一个600000000行的表。 对于我的报告应用程序,我希望通过使用GROUPBY子句对数据执行每日平均值来减少行数。,mysql,mariadb,Mysql,Mariadb,然后将使用我的报告应用程序中较小的数据子集,数据减少了99% 因为这将每天“建造”;最好的工具是什么?存储过程、视图还是其他工具?构建和维护汇总表。最初,您需要运行一个大组来收集所有旧数据。之后,夜间作业将计算前一天的计数*、总和…,等等 然后“报告”将在这个新表上运行得更快 该表的键将包括day而不是date+time,以及报告可能需要的一些列 我发现典型的加速比是10倍;您可能会得到100 x 99%的折扣 最好的工具是通过cron或MySQL事件运行的脚本。它只会做一些类似的事情 INS

然后将使用我的报告应用程序中较小的数据子集,数据减少了99%


因为这将每天“建造”;最好的工具是什么?存储过程、视图还是其他工具?

构建和维护汇总表。最初,您需要运行一个大组来收集所有旧数据。之后,夜间作业将计算前一天的计数*、总和…,等等

然后“报告”将在这个新表上运行得更快

该表的键将包括day而不是date+time,以及报告可能需要的一些列

我发现典型的加速比是10倍;您可能会得到100 x 99%的折扣

最好的工具是通过cron或MySQL事件运行的脚本。它只会做一些类似的事情

INSERT INTO SummaryTable (dy, ..., ct, tot, ...)
SELECT DATE(datetime), ...,   -- key
       COUNT(*), SUM(..), ...   -- data
   FROM FactTable
   WHERE datetime >= CURDATE() - INTERVAL 1 DAY
     AND datetime  < CURDATE();
这一条SQL语句可能就是所需要的全部。是的,它可以在存储过程中,但这与直接在夜间脚本中没有太大区别

在某些情况下,最好使用INSERT。。。在重复密钥更新时。。。选择但这会变得一团糟

当谈到平均值时,请考虑以下内容:

每天晚上可以计算日均值:平均值…,但 可能应该计算月平均值,而不是日平均值,而是根据SUMdaily_总和/SUMdaily_计数。也就是说,汇总表可能需要COUNT*和SUM。。。。 为了最初填充这个汇总表,我将编写一个一次性脚本,一天一天慢慢地遍历6亿行。当然,您可以一次完成所有操作,但对其他所有操作的干扰可能是“不好的”

更好的做法是在夜间脚本中包含代码,以便从它停止的地方重新开始。这样,如果某个晚上脚本无法运行,它将在第二天晚上修复遗漏。或者,当您看到问题时,可以手动运行它。再跑一次也不会有任何伤害

在编写时,考虑一下可能需要的其他汇总表。我通常发现数据仓库应用程序需要3-7个汇总表。另一方面,请记住,可以从每日汇总表中高效地导出每周和每月汇总。在一些案例中,我有一个每小时的汇总表,然后是不同事情的每日汇总表


6亿排是大的。是否将清除“旧”数据?一旦有了所需的汇总表,“旧”数据是否不再需要

您将拥有执行查询、将结果保存到表中以及执行其他簿记操作的作业。视图不会被物化或缓存,因此,如果要生成新的聚合结果,使用视图不会获得性能优势,将它们存储在表中,然后查询您将使用存储过程提供的过程方法。因此,建议使用存储过程每天运行一个作业,将新记录插入到新表中?谢谢您键入所有这些内容。通过创建一个存储过程(插入昨天的平均值),然后创建一个事件来执行它,这帮助我得到了我想要的东西。