MySQL 8.0 参考手册  / 第24章分区  / 24.6 分区的约束和限制  /  22.6.2 与存储引擎相关的分区限制

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

以下限制适用于使用具有用户定义的表分区的存储引擎。

合并存储引擎。  自定义分区和MERGE 存储引擎不兼容。使用 MERGE存储引擎的表不能分区。不能合并分区表。

联合存储引擎。 FEDERATED不支持表 分区;无法创建分区 FEDERATED表。

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

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

InnoDB不支持使用多个磁盘进行子分区。(目前只有 . 支持 MyISAM。)

此外, ALTER TABLE ... OPTIMIZE PARTITION不能正确处理使用InnoDB 存储引擎的分区表。而是对此类表使用ALTER TABLE ... REBUILD PARTITIONand ALTER TABLE ... ANALYZE PARTITION。有关详细信息,请参阅 第 13.1.8.1 节,“ALTER TABLE 分区操作”

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

异常(不适用于生产)new :可以通过将NDB Cluster SQL 节点上的系统变量设置为来覆盖此限制 ON。如果您选择这样做,您应该知道使用非分区类型的表[LINEAR] KEY在生产中不受支持。在这种情况下,您可以创建和使用分区类型不是KEY 或的表LINEAR KEY,但这样做的风险完全由您自己承担

可以为 NDB表定义的最大分区数取决于集群中数据节点和节点组的数量、所使用的 NDB Cluster 软件的版本以及其他因素。有关详细信息,请参阅 NDB 和用户定义的分区

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

CREATE TABLEALTER TABLE不允许使用会导致用户分区 NDB表不满足以下两个要求中的一个或两个的语句,并且会失败并出现错误 :

  1. 该表必须具有明确的主键。

  2. 表的分区表达式中列出的所有列都必须是主键的一部分。

例外。  如果用户分区NDB表是使用空列列表(即使用 PARTITION BY KEY()PARTITION BY LINEAR KEY())创建的,则不需要显式主键。

分区选择。  表不支持分区选择 NDB。有关详细信息,请参阅 第 22.5 节,“分区选择”

升级分区表。  执行升级时, 必须转储并重新加载由除此之外 的KEY任何存储引擎分区和使用的表。NDB

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

  • 不要为任何分区或子分区 指定任何 引擎

  • 为所有分区或子分区 指定引擎