使用int和timestamp进行mysql分区

时间:2013-11-13 15:38:24

标签: mysql partitioning

我有MySQL 5.6.12社区服务器。 我正在尝试对我的MySQL innoDB表进行分区,该表包含5M(并且总是增长)的历史数据行。它变得越来越慢,我认为分区将解决它。

我有专栏。

stationID int(4)
valueNumberID(int 5)
logTime(timestamp)
value(double)

(stationID,valueNumberID,logTime)是我的PRIMARY键。

我有50个不同的stationID。每个站都有历史数据,我需要存储5年。每个stationID只有2-5个不同的valueNumberID,但每天有数百个值更改。系统中的每个查询都按该顺序使用stationID,valueNumberID和logTime。在大多数情况下,查询仅限于当前年份。

我想使用stationID创建分区,每个stationID都有自己的分区,因此查询使用较小的物理表进行扫描,并通过logTime对其进行子分区来进一步减小表的大小。我不知道如何为50个不同的stationID创建自己的分区,并使用时间戳为它们创建子分区。


感谢您的回复。 SELECT查询变得越来越慢。对我而言,它似乎随着桌子的增长而线性变慢。问题必须与GROUP语句有关。这是一个示例查询。 SELECT DATE_FORMAT(logTime,“%Y%m%d%H%i%s”)AS'logTime',SUM(Value)FROM他的WHERE stationID = 23 AND valueNumberID = 4 AND logTime> '2013-01-01 00:00:00'AND log< '2013-11-14 00:00:00'GROUP BY DATE_FORMAT(logPVM,“%Y%m”)ORDER BY logTime LIMIT 0,120; 这样的查询/查询的目的是以小时,天,周,月间隔给出AVG,MAX,MIN,SUM。查询的结果与结果以各种方式(图形,excel文件)呈现给用户的方式紧密相关,如果我要更改查询,则需要很长时间才能更改。因此,我正在寻找一种简单的分区方法。

本表估计每月1.2-1.4M行。

谢谢

0 个答案:

没有答案