2011-11-25 76 views
1

試圖爲MySQL 5.5(InnoDB)表實現分區策略,我不確定我的理解是否正確,或者如果我需要更改創建分區的語法。MySQL 5.5分區策略(InnoDB)

表 「蘋果」 具有10行磨...列 「A」 至 「H」 PK是列 「A」, 「B」 和 「C」

列 「A」 是一個字符列並可以識別200萬行的組。 我想列「A」將是一個很好的候選人嘗試和實現一個分區,因爲我選擇和刪除此列,並可能真的只是截斷分區時,不再需要的數據。

我發出了這個命令: ALTER TABLE Apple PARTITION BY KEY(A);

使用以下命令查看分區信息後: SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME ='Apple';

我看到所有的數據在分區P0

我錯認爲MySQL的是要打破分區的200萬自動的羣體?

我是否需要在Alter命令中指定分區數量?

我希望這會在一個分區中創建2百萬行的組,然後創建一個新的分區,因爲新的數據帶有列A的唯一值。

對不起,如果這太羅嗦了。 謝謝 - JeffSpicoli

回答

1

是的,你需要指定分區的數量(我假設默認是創建1分區)。按KEY分區使用內部散列函數http://dev.mysql.com/doc/refman/5.1/en/partitioning-key.html,因此不根據列的值選擇分區,而是根據從中計算的散列值來選擇分區。散列函數對於相同的輸入返回相同的結果,所以是的,具有相同值的所有行將位於相同的分區中。

但是如果你想能夠使用RANGE分區,也許你想要分區分區(因爲如果用KEY分區,你只知道分區中的行是均勻分佈的,但是許多不同的值最終會在相同的分區)。