【问题标题】:How to partition and subpartition MySQL by key?如何通过 key 对 MySQL 进行分区和子分区?
【发布时间】:2012-09-21 14:47:19
【问题描述】:

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

这个语法错了吗? :

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

SUBPARTITIONS 10是指每个主分区有10个子分区,还是表示所有主分区有10个子分区?

【问题讨论】:

    标签: mysql database database-partitioning


    【解决方案1】:

    奇怪的是你没有找到语法。 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
    

    【讨论】:

      【解决方案2】:

      经验法则:

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

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

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

      【讨论】:

      • 亲爱的反对者:我坚持我的声明;我很乐意进一步讨论它们。亲爱的 OP:我觉得劝阻你不要使用对你没有帮助的东西比帮助你浪费时间更重要。
      • 我是 MySQL 新手,但我认为 @Rick James 的博客的观点是合理的。有人愿意讨论这个问题并指出哪里错了吗?
      猜你喜欢
      • 2021-02-05
      • 2012-08-25
      • 1970-01-01
      • 2013-06-25
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      相关资源
      最近更新 更多