MySQL 5.5(InnoDB)的分区策略

时间:2011-11-25 06:04:48

标签: mysql innodb partitioning

尝试为MySQL 5.5(InnoDB)表实现分区策略,我不确定我的理解是否正确,或者我是否需要在创建分区时更改语法。

表“Apple”有10个行...列“A”到“H” PK是列“A”,“B”和“C”

列“A”是一个char列,可以识别200万行的组。 我认为列“A”是一个很好的候选者,可以尝试实现一个分区 我通过此列选择并删除,并且在不再需要数据时可能真的只是截断分区。

我发出了这个命令:     ALTER TABLE Apple     按键分组(A);

使用此命令查看分区信息后:     SELECT PARTITION_NAME,TABLE_ROWS FROM     INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME ='Apple';

我看到所有数据都在分区p0

我错误地认为MySQL会自动打破200万个分区的分区?

我是否需要在Alter命令中指定分区数?

我希望这会在一个分区中创建200万行的组,然后创建一个新分区,因为新数据带有“A”列的唯一值。

对不起,如果这太浪费了。 谢谢 - JeffSpicoli

1 个答案:

答案 0 :(得分:1)

是的,您需要指定分区数量(我假设默认是创建1个分区)。 KEY的分区使用内部散列函数http://dev.mysql.com/doc/refman/5.1/en/partitioning-key.html,因此不会根据列的值选择分区,而是根据它计算的哈希值。散列函数为相同的输入返回相同的结果,因此,具有相同值的所有行将位于同一分区中。

但是如果你想要能够进行DROP PARTITION,你可能希望按RANGE进行分区(因为如果用KEY分区,你只知道行在分区中均匀分布,但是你们许多不同的值最终都在同一个分区中分区)。

相关问题