22.6.2 与存储引擎有关的分区限制

以下限制适用于将存储引擎与用户定义的 table 分区一起使用。

MERGE 存储引擎. 用户定义的分区和MERGE存储引擎不兼容。使用MERGE存储引擎的 table 无法分区。分区 table 不能合并。

FEDERATED 存储引擎. 不支持对FEDERATEDtable 进行分区;无法创建分区的FEDERATEDtable。

CSV 存储引擎. 不支持使用CSV存储引擎的分区 table;无法创建分区的CSVtable。

InnoDB 存储引擎. InnoDB外键和 MySQL 分区不兼容。分区InnoDBtable 不能具有外键引用,也不能具有被外键引用的列。不能对具有外键引用的InnoDBtable 进行分区。

InnoDB不支持将多个磁盘用于子分区。 (目前仅MyISAM支持.)

此外,更改 table...优化分区无法与使用InnoDB存储引擎的分区 table 一起正常使用。对于此类 table,请使用ALTER TABLE ... REBUILD PARTITIONALTER TABLE ... ANALYZE PARTITION。有关更多信息,请参见第 13.1.8.1 节,“ ALTER TABLE 分区操作”

用户定义的分区和 NDB 存储引擎(NDB 群集). KEY(包括LINEAR KEY)分区是NDB存储引擎唯一支持的分区类型。在正常情况下,在 NDB Cluster 中不可能使用[+75+] KEY以外的任何分区类型创建 NDB Clustertable,并且尝试这样做会失败并显示错误。

异常(不适用于生产):可以通过将 NDB Cluster SQL 节点上的new系统变量设置为ON来覆盖此限制。如果选择执行此操作,则应注意,生产环境中不支持使用分区类型不是[LINEAR] KEY的 table。 在这种情况下,您可以创建和使用分区类型不是KEYLINEAR KEY的 table,但这完全由您自担风险

可以为NDBtable 定义的最大分区数取决于群集中数据节点和节点组的数量,正在使用的 NDB Cluster 软件的版本以及其他因素。有关更多信息,请参见NDB 和用户定义的分区

从 MySQL NDB Cluster 7.5.2 开始,每个分区在NDBtable 中可以存储的固定大小数据的最大数量为 128 TB。以前,这是 16 GB。

不允许会导致用户分区的NDBtable 不满足以下两个要求中的一个或两个的CREATE TABLEALTER TABLE语句是不允许的,并且失败并显示错误:

  • 该 table 必须具有显式主键。

  • 该 table 的分区 table 达式中列出的所有列都必须是主键的一部分。

exception. 如果使用空列列 table(即使用PARTITION BY KEY()PARTITION BY LINEAR KEY())创建了用户分区的NDBtable,则不需要显式主键。

升级分区 table. 执行升级时,必须转储并重新加载由KEY分区并且使用NDB以外的任何存储引擎的 table。

所有分区使用相同的存储引擎. 分区 table 的所有分区必须使用相同的存储引擎,并且整个 table 必须使用相同的存储引擎。另外,如果未在 table 级别上指定引擎,则在创建或更改分区 table 时必须执行以下任一操作:

  • 任何分区或子分区指定任何引擎

  • 全部分区或子分区指定引擎