我创建了一个表来记录我的应用程序的活动。该表将记录每月超过2百万条记录。所以我想按月或按周使用分区
CREATE TABLE IF NOT EXISTS `UL`.`Log` (
`LogID` INT(20) NOT NULL AUTO_INCREMENT,
`LogDate` DATETIME NULL,
`AssessorName` VARCHAR(255) NULL
PRIMARY KEY (`LogID`),
INDEX `AssessorName` (`AssessorName`),
INDEX `LogDate` (`LogDate`)
)
ENGINE = INNODB;
但问题是我必须手动创建分区,例如
PARTITION BY RANGE (EXTRACT(YEAR_MONTH FROM LogDate)) (
PARTITION pre_2014 VALUES LESS THAN (201400),
PARTITION jan_2014 VALUES LESS THAN (201401),
PARTITION feb_2014 VALUES LESS THAN (201402),
....
是否可以自动按月或按周创建分区?
由于
答案 0 :(得分:2)
请勿使用YEAR_MONTH()
,它不在此列表中:http://dev.mysql.com/doc/refman/5.6/en/partitioning-limitations-functions.html
相反,请使用TO_DAYS(LogDate)
和明确日期,例如'2014-01-01'
。
不,没有“自动”分区。编写Perl(或其他语言)代码来从information_schema
获取分区结构并计算下一个要添加的分区并不是一件非常困难的事。
您希望从PARTITIONing
获得什么?收益很少。我列出了in my blog。
此外,该链接还包含用于处理清除旧分区的代码,以及如何每周(或月)有效使用REORGANIZE PARTITIONS
。
答案 1 :(得分:-2)
为了以防万一,你不需要这个功能只需2mil mounth,在我的工作中我们每天记录500k - 1mil并且有一个450mil的日志表超过3,5是的。
但是但是......如果你打算记录更多2mil mounth它是一个很好的想法:)