MySQL 按 table 行分区

MySQL partitioning by table rows

我创建了一个table如下

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;

我想按 table 的行数对这个 table 进行分区 ==> 每 100K 行都会创建一个新分区。

如何从 MySQL 开始?

为什么?您可能不会从 PARTITIONing.

中获得任何好处

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

你有两个键在同一行,保留PRIMARY KEY,扔UNIQUE键。

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

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

进行分区

原因也来自客户。他们不想更改 table.

的密钥

这是我的解决方案

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; 

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

谢谢