如何通过密钥对MySQL进行分区和子分区?

时间:2012-09-21 14:47:20

标签: mysql database database-partitioning

我想将分区添加到我的innoDB表中。我试图搜索这个语法,但没有找到具体细节。

这种语法错了吗? :

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

SUBPARTITIONS 10是指每个主分区有10个子分区,还是意味着所有主分区都有10个子分区?

2 个答案:

答案 0 :(得分:3)

奇怪的是你找不到语法。 MySQL在线文档中列出了针对大多数常见操作的非常详细的语法。

在此处查看alter table的整体语法以使用分区:

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

即使与alter table语句一起使用,分区管理的语法也会保持不变,并且在MySQL文档的alter table语法页面上列出了一些细微差别。

要回答你的第一个问题,问题不是你的语法,而是你正在尝试通过Hash分区对分区的表进行子分区 - 这是不允许的,至少在MySQL 5.5中是这样。只能对范围或列表分区进行子分区。

在此处查看分区类型的完整列表:

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

关于第二个问题,假设你尝试的是什么工作,你将创建6个由catetoryID1哈希分区的分区,然后在这些分区中你有10个子分区被catetoryID2哈希化。所以你有所有

6 x 10 = 60 partitions

答案 1 :(得分:-2)

经验法则:

  • SUBPARTITION没用。它没有提供任何速度,没有别的。
  • 由于各种效率低下,不要超过50个分区。
  • PARTITION BY RANGE是唯一有用的。

INDEX通常可以提供比PARTITION更好的性能;让我们看看你的SELECT

关于分区的博客:http://mysql.rjweb.org/doc.php/partitionmaint