我的表格有5列:Date, Name, X, Y, Z
每个日期有~10个名字。对于每个名称,大约有100万 - 500万条记录。
查询总是如下所示:
Select sum(Z) from TABLENAME where Name='somename' AND Date between 'somedate' and 'otherdate' group by X,Y
对于这个少量的名字,我只是在日期上对表格进行了分区;忽略扫描我们实际上不需要的日期分区中的大量记录的额外费用(因为查询始终为1 Name
,但是多次(最多30天)< / p>
现在我需要将其缩放到~600 Name
s ,显然继续使用当前模型是不可行的。
我的第一直觉是每个Name
中每个Date
的SUBPARTITION。这应该可以解决规模问题,因为对于BETWEEN
子句中的任何日期,MySQL会将其缩小到每个日期分区的单个子分区。
这是一个很好的解决方案吗?我能做些什么更好吗?因为以自动方式创建这种结构会很痛苦;因为我每天都要加载数据,可能还有新的Name
。因此,我必须反省我正在加载的CSV文件,为每个Name
预先创建子分区,然后启动LOAD DATA INFILE
。