MySQL自动按周分区

时间:2015-08-10 03:18:16

标签: mysql database database-design partitioning mysql-5.1

我创建了一个表来记录我的应用程序的活动。该表将记录每月超过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),
....

是否可以自动按月或按周创建分区?

由于

2 个答案:

答案 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它是一个很好的想法:)