2012-09-21 61 views
2

我想將分區添加到我的innoDB表中。我試圖搜索這個語法,但沒有找到具體細節。如何通過密鑰對MySQL進行分區和子分區?

這是語法錯誤? :

ALTER TABLE Product PARTITION BY HASH(catetoryID1) PARTITIONS 6 
SUBPARTITION BY KEY(catetoryID2) SUBPARTITIONS 10; 

是否SUBPARTITIONS 10意味着每個主分區有10個子分區,還是意味着所有主要的分區都具有10個子分區當中劃分?

回答

3

很奇怪,你沒有發現的語法。 MySQL在線文檔對大多數常見操作都列出了相當詳細的語法。

看看這裏的alter table的整體語法與分區的工作:

http://dev.mysql.com/doc/refman/5.5/en/create-table.html

使用ALTER TABLE語句中使用,即使進行分區管理的語法將保持不變,與幾個細微差別列在MySQL文檔的alter table語法頁面上。

要回答你的第一個問題,這個問題是不是你的語法,而是你正試圖子分區由散列分區第一分區的表 - 這是不允許的,至少在MySQL 5.5。只有範圍或列表分區可以進行子分區。

看看這裏的分區類型的完整列表:

http://dev.mysql.com/doc/refman/5.5/en/partitioning-types.html

至於第二個問題,假設你正在嘗試將工作,你會創建由catetoryID1哈希6個分區,然後在這些內部,你會有10個由catetoryID2散列的子分區。所以你必須在拇指的所有

6 x 10 = 60 partitions 
-2

規則:

  • SUBPARTITION是沒用的。它不提供速度,沒有別的。
  • 由於種種效率低下,不具有超過約50分區的更多。
  • PARTITION BY RANGE是唯一有用的。

通常一個索引可以提供比PARTITION更好的性能;讓我們看看你的SELECT

我在分區博客:http://mysql.rjweb.org/doc.php/partitionmaint

+0

親愛的負選民:我堅持我的發言;我會很樂意進一步討論。親愛的OP:我覺得阻止你使用一些不會幫助你的東西比幫助你浪費你的時間更重要。 –