自动按周分区的MySQL分区技术

6

我创建了一张表来记录我的应用程序的活动。这个表每月将记录超过两百万条记录。因此,我希望使用按月或按周进行的分区。

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),
....

有没有自动按月或按周创建分区的方法?
谢谢。
1个回答

3
请不要使用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中获得什么?好处很少。我在我的博客中列出了它们。
此外,该链接包含用于清除旧分区的代码,以及如何每周(或每月)高效使用REORGANIZE PARTITIONS的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接