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

如何按键对MySQL进行分区和子分区?,mysql,database,database-partitioning,Mysql,Database,Database Partitioning,我想将分区添加到innoDB表中。我已经尝试过搜索这个语法,但没有找到细节 这个语法错了吗 ALTER TABLE Product PARTITION BY HASH(catetoryID1) PARTITIONS 6 SUBPARTITION BY KEY(catetoryID2) SUBPARTITIONS 10; 子分区10是指每个主分区有10个子分区,还是说所有主分区都有10个子分区?奇怪的是,您没有找到语法。MySQL在线文档为大多数常见操作列出了非常详细的语法 在这里查看alter

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

这个语法错了吗

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

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

奇怪的是,您没有找到语法。MySQL在线文档为大多数常见操作列出了非常详细的语法

在这里查看alter table用于分区的整体语法:

分区管理的语法即使在与ALTERTABLE语句一起使用时也会保持不变,MySQL文档中的ALTERTABLE语法页面中列出了一些细微差别

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

在这里查看分区类型的完整列表:

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

6 x 10 = 60 partitions

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

在这里查看alter table用于分区的整体语法:

分区管理的语法即使在与ALTERTABLE语句一起使用时也会保持不变,MySQL文档中的ALTERTABLE语法页面中列出了一些细微差别

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

在这里查看分区类型的完整列表:

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

6 x 10 = 60 partitions
经验法则:

  • 子分区
    无效。它不提供速度,也不提供其他任何东西
  • 由于各种各样的低效率,分区不超过50个
  • 按范围划分是唯一有用的方法
通常索引可以提供比分区更好的性能;让我们看看您的
选择

我的分区博客:

经验法则:

  • 子分区
    无效。它不提供速度,也不提供其他任何东西
  • 由于各种各样的低效率,分区不超过50个
  • 按范围划分是唯一有用的方法
通常索引可以提供比分区更好的性能;让我们看看您的
选择


我的分区博客:

亲爱的消极选民:我支持我的声明;我很乐意进一步讨论这些问题。亲爱的OP:我觉得劝阻你不要使用对你没有帮助的东西比帮助你浪费时间更重要。我是MySQL新手,但我认为@Rick James的博客的观点是合理的。有谁愿意讨论这件事并指出它错在哪里吗?亲爱的消极选民:我支持我的声明;我很乐意进一步讨论这些问题。亲爱的OP:我觉得劝阻你不要使用对你没有帮助的东西比帮助你浪费时间更重要。我是MySQL新手,但我认为@Rick James的博客的观点是合理的。有人愿意讨论这个问题并指出哪里是错的吗?