我在 MySQL 中有一个非常大的表(约 1 亿条记录),其中包含有关文件的信息。其中一条信息是每个文件的修改日期。
我需要编写一个查询来计算适合指定日期范围的文件数。为此,我制作了一个小表,指定了这些范围(均以天为单位),如下所示:
DateRanges
range_id range_name range_start range_end
1 0-90 0 90
2 91-180 91 180
3 181-365 181 365
4 366-1095 366 1095
5 1096+ 1096 999999999
并编写了一个如下所示的查询:
SELECT r.range_name, sum(IF((DATEDIFF(CURDATE(),t.file_last_access) > r.range_start and DATEDIFF(CURDATE(),t.file_last_access) < r.range_end),1,0)) as FileCount
FROM `DateRanges` r, `HugeFileTable` t
GROUP BY r.range_name
然而,可以预见的是,这个查询需要永远运行。我认为这是因为我要求 MySQL 遍历 HugeFileTable 5 次,每次对每个文件执行 DATEDIFF() 计算。
相反,我想做的是只逐条记录一次 HugeFileTable 记录,并为每个文件增加相应 range_name 运行总数中的计数。我不知道该怎么做......
有人可以帮忙吗?
谢谢。
编辑:MySQL 版本:5.0.45,表是 MyISAM
EDIT2:这是评论中要求的描述
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE r ALL NULL NULL NULL NULL 5 Using temporary; Using filesort
1 SIMPLE t ALL NULL NULL NULL NULL 96506321