【发布时间】:2015-04-18 15:08:34
【问题描述】:
我有一个大型数据集(它将继续增长!),其中批量读取的数据存储在 DATE 列中,因为任何核心数据表中的所有行都属于特定日期(上下文是分析/报告)。
许多视图需要每月而不是每天详细级别的数据,我正在通过 SQL(SUM、AVG 等)根据需要聚合数据。
这也意味着我正在按YEAR() 和MONTH() 对数据进行分组,这不能使用DATE 列上的索引,并导致来自查询执行程序的Use temporary 和Use filesort。
将DATE 列拆分为年、月和日的 3 个单独列是否是最佳解决方案?或者保留DATE 列(约束、排序等)并有一个“年月”(yyyymm)列也被索引?我不喜欢复制数据,但我只是不是 100% 知道这种情况下的最佳做法是什么。
【问题讨论】:
-
最佳解决方案是什么?通常,最好的解决方案是存储日期,然后将其保留。
-
仅仅因为使用临时和使用文件排序出现并不意味着您的查询将执行不佳。你有证据他们很慢吗?如果您正在寻找其他选项而不是 DATE 列,请考虑使用整数列并在其中存储基于纪元的数字时间戳
标签: mysql date query-optimization aggregate