# project_id 改为int
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
ALTER TABLE `device_status_history2`
MODIFY COLUMN `project_id` int(11) NOT NULL COMMENT '项目ID' AFTER `name`;
SELECT DISTINCT
YEAR(device_status_history2.create_date) AS year
FROM
device_status_history2;
# 设置联合主键
ALTER TABLE device_status_history2 DROP PRIMARY KEY, ADD PRIMARY KEY (id, create_date, project_id);
# 分区
ALTER TABLE device_status_history2
PARTITION BY RANGE (UNIX_TIMESTAMP(create_date))
SUBPARTITION BY HASH (project_id)
SUBPARTITIONS 4 (
PARTITION part2404 VALUES LESS THAN (UNIX_TIMESTAMP('2024-04-01 00:00:00')),
PARTITION part2405 VALUES LESS THAN (UNIX_TIMESTAMP('2024-05-01 00:00:00')),
PARTITION part2406 VALUES LESS THAN (UNIX_TIMESTAMP('2024-06-01 00:00:00')),
PARTITION part2407 VALUES LESS THAN (UNIX_TIMESTAMP('2024-07-01 00:00:00')),
PARTITION part2408 VALUES LESS THAN (UNIX_TIMESTAMP('2024-08-01 00:00:00')),
PARTITION part2409 VALUES LESS THAN (UNIX_TIMESTAMP('2024-09-01 00:00:00')),
PARTITION part2410 VALUES LESS THAN (UNIX_TIMESTAMP('2024-10-01 00:00:00')),
PARTITION part2411 VALUES LESS THAN (UNIX_TIMESTAMP('2024-11-01 00:00:00')),
PARTITION part2412 VALUES LESS THAN (UNIX_TIMESTAMP('2024-12-01 00:00:00')),
PARTITION part2501 VALUES LESS THAN (UNIX_TIMESTAMP('2025-01-01 00:00:00')),
PARTITION part2502 VALUES LESS THAN (UNIX_TIMESTAMP('2025-02-01 00:00:00')),
PARTITION part2503 VALUES LESS THAN (UNIX_TIMESTAMP('2025-03-01 00:00:00')),
PARTITION part2504 VALUES LESS THAN (UNIX_TIMESTAMP('2025-04-01 00:00:00')),
PARTITION part2505 VALUES LESS THAN (UNIX_TIMESTAMP('2025-05-01 00:00:00')),
PARTITION part2506 VALUES LESS THAN (UNIX_TIMESTAMP('2025-06-01 00:00:00')),
PARTITION part2507 VALUES LESS THAN (UNIX_TIMESTAMP('2025-07-01 00:00:00')),
PARTITION part2508 VALUES LESS THAN (UNIX_TIMESTAMP('2025-08-01 00:00:00')),
PARTITION part2509 VALUES LESS THAN (UNIX_TIMESTAMP('2025-09-01 00:00:00')),
PARTITION part2510 VALUES LESS THAN (UNIX_TIMESTAMP('2025-10-01 00:00:00')),
PARTITION part2511 VALUES LESS THAN (UNIX_TIMESTAMP('2025-11-01 00:00:00')),
PARTITION part2512 VALUES LESS THAN (UNIX_TIMESTAMP('2025-12-01 00:00:00')),
PARTITION part2601 VALUES LESS THAN (UNIX_TIMESTAMP('2026-01-01 00:00:00')),
PARTITION part2602 VALUES LESS THAN (UNIX_TIMESTAMP('2026-02-01 00:00:00')),
PARTITION part2603 VALUES LESS THAN (UNIX_TIMESTAMP('2026-03-01 00:00:00')),
PARTITION part2604 VALUES LESS THAN (UNIX_TIMESTAMP('2026-04-01 00:00:00')),
PARTITION part2605 VALUES LESS THAN (UNIX_TIMESTAMP('2026-05-01 00:00:00')),
PARTITION part2606 VALUES LESS THAN (UNIX_TIMESTAMP('2026-06-01 00:00:00')),
PARTITION part2607 VALUES LESS THAN (UNIX_TIMESTAMP('2026-07-01 00:00:00')),
PARTITION part2608 VALUES LESS THAN (UNIX_TIMESTAMP('2026-08-01 00:00:00')),
PARTITION part2609 VALUES LESS THAN (UNIX_TIMESTAMP('2026-09-01 00:00:00')),
PARTITION part2610 VALUES LESS THAN (UNIX_TIMESTAMP('2026-10-01 00:00:00')),
PARTITION part2611 VALUES LESS THAN (UNIX_TIMESTAMP('2026-11-01 00:00:00')),
PARTITION part2612 VALUES LESS THAN (UNIX_TIMESTAMP('2026-12-01 00:00:00')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
```
# project_id 改为int
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
ALTER TABLE `device_status_history2`
MODIFY COLUMN `project_id` int(11) NOT NULL COMMENT '项目ID' AFTER `name`;
SELECT DISTINCT
YEAR(device_status_history2.create_date) AS year
FROM
device_status_history2;
# 设置联合主键
ALTER TABLE device_status_history2 DROP PRIMARY KEY, ADD PRIMARY KEY (id, create_date, project_id);
# 分区
ALTER TABLE device_status_history2
PARTITION BY RANGE (UNIX_TIMESTAMP(create_date))
SUBPARTITION BY HASH (project_id)
SUBPARTITIONS 4 (
PARTITION part2404 VALUES LESS THAN (UNIX_TIMESTAMP('2024-04-01 00:00:00')),
PARTITION part2405 VALUES LESS THAN (UNIX_TIMESTAMP('2024-05-01 00:00:00')),
PARTITION part2406 VALUES LESS THAN (UNIX_TIMESTAMP('2024-06-01 00:00:00')),
PARTITION part2407 VALUES LESS THAN (UNIX_TIMESTAMP('2024-07-01 00:00:00')),
PARTITION part2408 VALUES LESS THAN (UNIX_TIMESTAMP('2024-08-01 00:00:00')),
PARTITION part2409 VALUES LESS THAN (UNIX_TIMESTAMP('2024-09-01 00:00:00')),
PARTITION part2410 VALUES LESS THAN (UNIX_TIMESTAMP('2024-10-01 00:00:00')),
PARTITION part2411 VALUES LESS THAN (UNIX_TIMESTAMP('2024-11-01 00:00:00')),
PARTITION part2412 VALUES LESS THAN (UNIX_TIMESTAMP('2024-12-01 00:00:00')),
PARTITION part2501 VALUES LESS THAN (UNIX_TIMESTAMP('2025-01-01 00:00:00')),
PARTITION part2502 VALUES LESS THAN (UNIX_TIMESTAMP('2025-02-01 00:00:00')),
PARTITION part2503 VALUES LESS THAN (UNIX_TIMESTAMP('2025-03-01 00:00:00')),
PARTITION part2504 VALUES LESS THAN (UNIX_TIMESTAMP('2025-04-01 00:00:00')),
PARTITION part2505 VALUES LESS THAN (UNIX_TIMESTAMP('2025-05-01 00:00:00')),
PARTITION part2506 VALUES LESS THAN (UNIX_TIMESTAMP('2025-06-01 00:00:00')),
PARTITION part2507 VALUES LESS THAN (UNIX_TIMESTAMP('2025-07-01 00:00:00')),
PARTITION part2508 VALUES LESS THAN (UNIX_TIMESTAMP('2025-08-01 00:00:00')),
PARTITION part2509 VALUES LESS THAN (UNIX_TIMESTAMP('2025-09-01 00:00:00')),
PARTITION part2510 VALUES LESS THAN (UNIX_TIMESTAMP('2025-10-01 00:00:00')),
PARTITION part2511 VALUES LESS THAN (UNIX_TIMESTAMP('2025-11-01 00:00:00')),
PARTITION part2512 VALUES LESS THAN (UNIX_TIMESTAMP('2025-12-01 00:00:00')),
PARTITION part2601 VALUES LESS THAN (UNIX_TIMESTAMP('2026-01-01 00:00:00')),
PARTITION part2602 VALUES LESS THAN (UNIX_TIMESTAMP('2026-02-01 00:00:00')),
PARTITION part2603 VALUES LESS THAN (UNIX_TIMESTAMP('2026-03-01 00:00:00')),
PARTITION part2604 VALUES LESS THAN (UNIX_TIMESTAMP('2026-04-01 00:00:00')),
PARTITION part2605 VALUES LESS THAN (UNIX_TIMESTAMP('2026-05-01 00:00:00')),
PARTITION part2606 VALUES LESS THAN (UNIX_TIMESTAMP('2026-06-01 00:00:00')),
PARTITION part2607 VALUES LESS THAN (UNIX_TIMESTAMP('2026-07-01 00:00:00')),
PARTITION part2608 VALUES LESS THAN (UNIX_TIMESTAMP('2026-08-01 00:00:00')),
PARTITION part2609 VALUES LESS THAN (UNIX_TIMESTAMP('2026-09-01 00:00:00')),
PARTITION part2610 VALUES LESS THAN (UNIX_TIMESTAMP('2026-10-01 00:00:00')),
PARTITION part2611 VALUES LESS THAN (UNIX_TIMESTAMP('2026-11-01 00:00:00')),
PARTITION part2612 VALUES LESS THAN (UNIX_TIMESTAMP('2026-12-01 00:00:00')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
```
RDS MySQL对表分区有以下限制:
只能对数据表的整型列进行分区,或者数据列可以通过分区函数转换成整型列。
单表最大分区数目(包含子分区)不能超过8192。
如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键内。
不支持外键。
不支持全文索引(FULL TEXT)。
数据库类型:MySQL 5.6; CPU:8核; 最大连接数:8000; 最大IOPS:12000;
创建新的分区表,与原表保持同样的结构,将创建时间类型改为datetime; 分批写入历史数据,每次1000万,大约7分钟时间;(查出最近14天会更新的最小ID,这批数据停机插入!) 停机插入最后的14天数据; Rename表,重启服务;
project_system_info_history 表: