MySQL按表行分区

时间:2015-08-04 10:46:54

标签: mysql database partitioning database-partitioning

我创建一个表格如下

CREATE TABLE `Archive_MasterLog` (
  `LogID` INT(10) NOT NULL AUTO_INCREMENT,
  `LogDate` DATETIME NULL,
  `AssessorName` VARCHAR(255) NULL,
  `TblName` VARCHAR(100) NULL,
  PRIMARY KEY (`LogID`),
  UNIQUE INDEX `Index_72491D22_3806_4A01` (`LogID`)
)
ENGINE = INNODB;

我想按表格的行数对此表进行分区 ==>每100K行将创建一个新分区。

如何从MySQL做到这一点?

2 个答案:

答案 0 :(得分:1)

为什么呢?您可能不会从PARTITIONing获得任何好处。

你会清除旧数据吗?如果是这样,LogDate上的分区。然后我们可以讨论如何清除。

您在同一对行上有两个键,保留PRIMARY KEY,然后抛出UNIQUE键。

您有RecordID的索引,但该列不存在?

答案 1 :(得分:0)

问题来自频繁的数据。几个月或几周我们有超过2M行/月但其他月份我们有不到10K行。我查看了数据,发现我们应该按LogID进行分区

还有来自客户的意见。他们不想改变表的关键。

这是我的解决方案

CREATE TABLE `ULPAT`.`MasterLog` (
  `LogID` INT(10) NOT NULL AUTO_INCREMENT,
  `LogDate` DATETIME NULL,
  `AssessorName` VARCHAR(255) NULL,
  `TblName` VARCHAR(100) NULL,
  PRIMARY KEY (`LogID`),

  INDEX `LogID` (`LogID`)
)
ENGINE = INNODB
PARTITION BY HASH(mod(ceiling(LogID*0.0000005), 400))
PARTITIONS 400; 

我认为这不是最好的解决方案,但对我有用。

由于