【发布时间】:2023-03-23 22:25:01
【问题描述】:
我有一个包含大量数据的表,并且这些数据已经被分割成分区。现在我想为一种新型数据集添加一个新分区。
当前表格如下所示:
create table audit_log
(
id bigint unsigned auto_increment,
inserted_at datetime default '0000-00-00 00:00:00' not null,
eventType varchar(50) not null,
eventTableName varchar(255) default '' not null,
entityId int unsigned null,
matchId int unsigned null,
userId int unsigned null,
route varchar(255) null,
changes longtext null,
primary key (id, eventTableName, inserted_at)
)
collate=utf8_unicode_ci;
有几个基于eventTableName 和inserted_at 列的分区:
ALTER TABLE audit_log PARTITION BY RANGE COLUMNS (eventTableName, inserted_at) (
PARITION day_referee_statistics_20190902 VALUES LESS THAN ('referee_statistics','2019-09-03'),
PARITION day_referee_statistics_20190903 VALUES LESS THAN ('referee_statistics','2019-09-04'),
PARITION referee_future VALUES LESS THAN ('referee_statistics',MAXVALUE),
PARITION day_team_statistics_20190902 VALUES LESS THAN ('team_statistics','2019-09-03'),
PARITION day_team_statistics_20190903 VALUES LESS THAN ('team_statistics','2019-09-04'),
PARITION team_statistics_future VALUES LESS THAN ('team_statistics',MAXVALUE),
PARITION future VALUES LESS THAN (MAXVALUE, MAXVALUE);
还有很多其他的分区...
现在我想为要审核的新表添加一个新分区:results_future 分区。首先,我尝试替换未来的分区,但失败了,因为还有其他分区之间的值更高。然后我对它们进行了排序,但仍然得到同样的错误:
ALTER TABLE audit_log REORGANIZE PARTITION future_team_statistics INTO (
PARTITION future_results VALUES LESS THAN ('results',MAXVALUE),
PARTITION future_team_statistics VALUES LESS THAN ('team_statistics',MAXVALUE)
)
失败:
一般错误:1493 VALUES LESS THAN value 必须严格增加每个分区
【问题讨论】:
-
也许我发现了错误..让我尝试一件事:)
-
看来我只是需要一只鸭子来告诉我我的问题......
-
向我们展示此分区有帮助的查询。我怀疑分区是浪费时间。
-
问题是没有查询到数据。问题是插入和删除数据。分区拆分索引,因此插入只更新一个小索引。删除数据只是删除一个完整的分区。无论如何:这不是问题。
-
是的,使用
DROP PARTITION比使用等效的DELETE快很多。但是,无论索引大小如何,更新索引的速度都差不多。
标签: mysql partitioning