MySQL分区 - 主键和唯一记录错误

时间:2017-09-12 15:44:29

标签: mysql partitioning

我有一张大约有2Mln记录的大表,我想对它进行分区。

我将id列作为PRIMARY AUTO_INCREMENT int(并且它必须始终为UNIQUE)。 我是一个专栏"他们是" int(4)我希望将BY RANGE从2016年分区到2050年,因为大多数Query使用WHERE语句获得1年的时间。

进行分区我得到一个错误,说明"他们早期" key必须是PRIMARY KEY,所以我编辑了主键,执行多列键PRIMARY(id,theyear)。

一切都好,但我的" id"列不再是独一无二的,因为它会检查"它们是什么"列也...... 所以,如果我插入:

INSERT INTO table (id, theyear) VALUES (1, 2016);
INSERT INTO table (id, theyear) VALUES (1, 2017);

它说NO ERROR,因为UNIQUE检查id和他们都是。

如何实现分区而不会丢失UNIQUE" id"列?

感谢。

1 个答案:

答案 0 :(得分:0)

由于您的查询将在其中使用theyear,因此通过RANGE进行分区将有助于使用正确的INDEX来处理大数据。

请勿使用KEY()分区,保留现有的主键

INDEX IDX_theyear(theyear)

PARTITION BY RANGE (theyear) ( 
PARTITION p0 VALUES LESS THAN (2017), 
PARTITION p1 VALUES LESS THAN (2018), 
PARTITION p2 VALUES LESS THAN (2019), 
PARTITION p3 VALUES LESS THAN (2020)
例如,

。您可以稍后添加更多分区,但更难。如果您的数据较旧,那么显然从最早的一年开始