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;
我认为这不是最好的解决方案,但对我有用。
谢谢
我创建了一个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;
我认为这不是最好的解决方案,但对我有用。
谢谢