【问题标题】:MySQL partitioning by week automaticallyMySQL自动按周分区
【发布时间】:2015-11-01 20:56:05
【问题描述】:

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

有没有办法自动按月或按周创建分区?

谢谢

【问题讨论】:

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


    【解决方案1】:

    不要使用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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 分区要求与机器容量和常见查询/用例密切相关。在不了解更多细节的情况下,不可能一概而论地说明是否需要分区,或者它是否会提高效率。
      猜你喜欢
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多