我有 MySQL 5.6.12 社区服务器。我正在尝试对包含 5M(并且一直在增长)历史数据行的 MySQL innoDB 表进行分区。它越来越慢,我认为分区可以解决它。
我有专栏。
stationID int(4)
valueNumberID(int 5)
logTime(timestamp)
value(double)
(stationID,valueNumberID,logTime) 是我的主键。
我有 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 His WHERE stationID=23 AND valueNumberID=4 AND logTime > '2013-01-01 00: 00:00' AND logTime < '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 行出现在此表中。
谢谢