我想使用mysql分区表将表分区为YEAR和WEEK号。我确切知道如何使用mysql合并表,但分区表是不同的。有人可以帮助解决下表模式吗?
CREATE TABLE `tableName` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`dateandtime` datetime NOT NULL,
`othervalue` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
它也必须在某个引擎中吗?
如果我将dateandtime存储为int(10)时间戳,我该怎么做?
CREATE TABLE `tableName` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`dateandtime` int(10) NOT NULL,
`othervalue` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
答案 0 :(得分:3)
MySQL 5.1无法按日期进行分区,因此您必须解决方法...通常按函数TO_DAYS(dateandtime)
进行分区,例如:
CREATE TABLE tbl ( ... ) ENGINE=InnoDB PARTITION BY RANGE (to_days(dateandtime)) ( PARTITION pNULL VALUES LESS THAN (0) ENGINE = InnoDB, PARTITION p20111218 VALUES LESS THAN (TO_DAYS('2011-12-18')) ENGINE = InnoDB, PARTITION p20111225 VALUES LESS THAN (TO_DAYS('2011-12-25')) ENGINE = InnoDB, PARTITION pNew VALUES LESS THAN MAXVALUE ENGINE = InnoDB )
我在这里定义了4个分区 - 第一个只是为了完整性,所以将来插入日期不会失败。 (您不能插入不存在分区的值。)第一个分区用于提高性能 - 将在其中临时存储NULL值。实际上正在使用中间2个分区,每个分区保留一周的数据。
您可以使用ALTER TABLE tbl DROP PARTITION xyz
删除旧分区(与仅删除旧行相比,这非常快)。您可以通过拆分最后一个分区来添加新分区:
ALTER TABLE tbl REORGANIZE PARTITION pNew INTO ( PARTITION p20120115 VALUES LESS THAN (TO_DAYS('2012-01-16')), ... PARTITION pNew VALUES LESS THAN (MAXVALUE) );