尝试为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
答案 0 :(得分:1)
是的,您需要指定分区数量(我假设默认是创建1个分区)。 KEY的分区使用内部散列函数http://dev.mysql.com/doc/refman/5.1/en/partitioning-key.html,因此不会根据列的值选择分区,而是根据它计算的哈希值。散列函数为相同的输入返回相同的结果,因此,具有相同值的所有行将位于同一分区中。
但是如果你想要能够进行DROP PARTITION,你可能希望按RANGE进行分区(因为如果用KEY分区,你只知道行在分区中均匀分布,但是你们许多不同的值最终都在同一个分区中分区)。