26.6.2 分区限制与存储引擎
在 MySQL 8.4 中,分区支持不是由 MySQL Server 提供,而是由表的存储引擎自己的或原生分区处理器提供。在 MySQL 8.4 中,只有 InnoDB
和 NDB
存储引擎提供原生分区处理器。这意味着不能使用任何其他存储引擎创建分区表。(您必须使用 MySQL NDB 集群与 NDB
存储引擎来创建 NDB
表。)
InnoDB 存储引擎。 InnoDB
外键和 MySQL 分区不兼容。分区的 InnoDB
表不能有外键引用,也不能有被其他表外键引用的列。具有或被外键引用的 InnoDB
表不能进行分区。
ALTER TABLE ... OPTIMIZE PARTITION
不适用于使用 InnoDB
的分区表。请使用 ALTER TABLE ... REBUILD PARTITION
和 ALTER TABLE ... ANALYZE PARTITION
,对于这样的表。更多信息,请参阅第15.1.9.1节,“ALTER TABLE 分区操作”。
用户定义分区和 NDB 存储引擎(NDB 集群)。 对于 NDB
存储引擎,唯一支持的分区类型是按键(包括线性键)分区。除非在 NDB 集群中有特殊情况,否则不能在正常情况下创建一个使用除了 LINEAR KEY
之外其他任何分区类型的 NDB 集群表,并且尝试这样做会导致错误。
对于 NDB
表的最大分区数取决于集群中的数据节点和节点组数量、使用的 NDB 集群软件版本以及其他因素。有关 NDB 和用户定义分区的更多信息,请参阅NDB 和用户定义分区。
对于 NDB
表的每个分区,固定大小数据的最大存储量为 128 TB。之前,这个限制是 16 GB。
CREATE TABLE
和 ALTER TABLE
语句,如果它们会导致用户分区的 NDB
表不满足以下两个要求中的任意一个,将被拒绝,并且会产生错误:
-
表必须有一个显式的主键。
-
分区表达式中列出的所有列都必须是主键的一部分。
例外情况。 如果使用空列列表(即使用 PARTITION BY KEY()
或 PARTITION BY LINEAR KEY()
)创建了一个用户分区的 NDB
表,那么不需要显式主键。
分区选择。 对于 NDB
表,分区选择不受支持。有关更多信息,请参阅第26.5节,“分区选择”。
升级分区表。 在进行升级时,必须将使用按键分区的表导出并重新加载。
有关将 MyISAM
表转换为 InnoDB
的信息,请参阅第17.6.1.5节,“将表从 MyISAM 转换到 InnoDB”。