MySQL 自动按周分区
MySQL partitioning by week automatically
我创建了一个 table 来记录我的应用程序的 activity。 table 每月将记录超过 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),
....
有没有自动按月或按周创建分区的方法?
谢谢
不要使用YEAR_MONTH()
,它不在此处的列表中:http://dev.mysql.com/doc/refman/5.6/en/partitioning-limitations-functions.html
而是使用 TO_DAYS(LogDate)
和明确的日期,例如 '2014-01-01'
。
不,没有 "automatic" 分区。编写 Perl(或其他语言)代码以从 information_schema
中获取分区结构并计算下一个要添加的分区并不太难。
您希望从PARTITIONing
中获得什么?好处很少。我列出了它们 in my blog.
另外,link 有处理清除旧分区的代码,以及如何每周(或每月)高效使用 REORGANIZE PARTITIONS
。
我创建了一个 table 来记录我的应用程序的 activity。 table 每月将记录超过 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),
....
有没有自动按月或按周创建分区的方法?
谢谢
不要使用YEAR_MONTH()
,它不在此处的列表中:http://dev.mysql.com/doc/refman/5.6/en/partitioning-limitations-functions.html
而是使用 TO_DAYS(LogDate)
和明确的日期,例如 '2014-01-01'
。
不,没有 "automatic" 分区。编写 Perl(或其他语言)代码以从 information_schema
中获取分区结构并计算下一个要添加的分区并不太难。
您希望从PARTITIONing
中获得什么?好处很少。我列出了它们 in my blog.
另外,link 有处理清除旧分区的代码,以及如何每周(或每月)高效使用 REORGANIZE PARTITIONS
。