2

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

这个语法错了吗?:

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

SUBPARTITIONS 10是说每个主分区有 10 个子分区,还是说所有主分区都有 10 个子分区?

4

2 回答 2

3

奇怪的是你没有找到语法。MySQL 在线文档为最常见的操作列出了非常详细的语法。

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

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

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

要回答您的第一个问题,问题不在于您的语法,而在于您正在尝试对首先通过哈希分区进行分区的表进行子分区 - 这是不允许的,至少在 MySQL 5.5 中是不允许的。只有 Range 或 List 分区可以进行子分区。

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

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

至于第二个问题,假设您尝试的方法可行,您将创建 6 个由 catetoryID1 散列的分区,然后在这些分区中,您将有 10 个由 catetoryID2 散列的子分区。所以你会有

6 x 10 = 60 partitions
于 2012-10-12T07:03:20.400 回答
-3

经验法则:

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

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

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

于 2015-11-26T04:55:09.340 回答