5

我创建了一个表来记录我的应用程序的活动。该表每月将记录超过 200 万条记录。所以我想按月或周使用分区

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

有什么方法可以自动按月或按周创建分区吗?

谢谢

4

2 回答 2

3

不要使用YEAR_MONTH(),它不在此处的列表中:http: //dev.mysql.com/doc/refman/5.6/en/partitioning-limitations-functions.html

相反,请使用TO_DAYS(LogDate)明确的日期,例如'2014-01-01'.

不,没有“自动”分区。information_schema编写 Perl(或其他语言)代码以从 中获取分区结构并计算接下来要添加的分区并不是一项艰巨的任务。

你希望从中获得PARTITIONing什么?好处很少。我已经在我的博客中列出了它们。

此外,该链接具有处理清除旧分区的代码,以及如何有效地使用REORGANIZE PARTITIONS每周(或每月)。

于 2015-08-10T05:05:33.887 回答
-3

以防万一,你不需要这个功能只需要 200 万个,在我的工作中,我们每天记录 500k - 100 万个,并且有一个超过 3.5 行的 4.5 亿行的日志表。

但是但是但是...如果您打算记录更多,那么 200 万一次,这是一个好主意 :)

于 2015-08-18T06:12:09.927 回答