在 MySQL 8.4 中,分区支持实际上不是由 MySQL 服务器提供的,而是由表存储引擎自身的或本机分区处理程序提供的。在 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 集群)。 按 KEY
分区(包括 LINEAR KEY
)是 NDB
存储引擎支持的唯一分区类型。在正常情况下,在 NDB 集群中无法使用除 [LINEAR
] KEY
之外的任何分区类型创建 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 节“分区选择”。
升级分区表。 执行升级时,按 KEY
分区的表必须转储并重新加载。
有关将 MyISAM
表转换为 InnoDB
的信息,请参阅 第 17.6.1.5 节“将表从 MyISAM 转换为 InnoDB”。