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

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

在 MySQL 8.0 中,分区支持实际上并不是由 MySQL 服务器提供的,而是由表存储引擎自己的或本机分区处理程序提供的。在 MySQL 8.0 中,只有InnoDBNDB存储引擎提供本机分区处理程序。这意味着不能使用除这些以外的任何其他存储引擎来创建分区表。(您必须使用带有 NDB存储引擎的 MySQL NDB Cluster 来创建 NDB表。)

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

ALTER TABLE ... OPTIMIZE PARTITION不能与使用InnoDB. 而是对此类表使用 ALTER TABLE ... REBUILD PARTITIONand ALTER TABLE ... ANALYZE PARTITION。有关详细信息,请参阅 第 13.1.9.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 和用户定义的分区

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

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

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

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

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

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

升级分区表。  执行升级时,分区的表 KEY必须转储并重新加载。使用非存储引擎的分区表 InnoDB不能从MySQL 5.7或更早版本升级到MySQL 8.0或更高版本;您必须在升级之前 从这些表中删除分区ALTER TABLE ... REMOVE PARTITIONING或将它们转换为 InnoDB使用。ALTER TABLE ... ENGINE=INNODB

有关将MyISAM 表转换为 的信息InnoDB,请参阅 第 15.6.1.5 节,“将表从 MyISAM 转换为 InnoDB”