我有一张大约有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"列?
感谢。
答案 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)
例如,。您可以稍后添加更多分区,但更难。如果您的数据较旧,那么显然从最早的一年开始