问题
我有一个表类似表结构如下:
CREATE TABLE quarterly_report_status (
id INT NOT NULL auto_increment PRIMARY KEY,
report_status VARCHAR(20) NOT NULL,
report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
需求是根据 report_updated,按月创建分区表,有什么好办法处理
建表的时候直接加上分区参数不就行了吗?和Mysql一样的手动写 分区名和分区范围
不是啊,各位注意我有个主键,只是自增字段,不包括时间字段
CREATE TABLE quarterly_report_status (
id INT NOT NULL auto_increment PRIMARY KEY,
report_status VARCHAR(20) NOT NULL,
report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
PARTITION BY RANGE (TO_DAYS(report_updated)) (
PARTITION p202301 VALUES LESS THAN (TO_DAYS(‘2023-02-01’)),
PARTITION p202302 VALUES LESS THAN (TO_DAYS(‘…’)),
PARTITION p202303 VALUES LESS THAN (TO_DAYS(‘…’)),
PARTITION p202304 VALUES LESS THAN (TO_DAYS(‘…’)),
…
PARTITION pmax VALUES LESS THAN MAXVALUE
); 但这样分区比较奇怪啊,时间列设置成了自动更新,TIDB又没有O的 referencer分区,建议使用Key分区
可更新的字段作为分区字段其实我是不太建议的,应该弄一个不会被更新的字段和id组成一个主键
是不是可以新增一个类似insert_date 作为分区,reortupdate 自动更新 不大合适
用tidb这种情况最好别分区,意义不大问题还多