如何按关键字对MySQL进行分区和子分区



我想在innoDB表中添加分区。我已经试着搜索这个语法,但没有找到具体的内容。

这是语法错误吗?:

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

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

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

在这里可以找到使用分区的alter表的整体语法:

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个子分区,按catetory ID2散列。所以你会在所有中

6 x 10 = 60 partitions

经验法则:

  • SUBPARTITION是无用的。它不提供速度,也不提供其他任何东西
  • 由于效率低下,分区数量不超过50个
  • CCD_ 3是唯一有用的

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

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

相关内容

  • 没有找到相关文章

最新更新