在 MySQL 9.0 中,分区支持实际上不是由 MySQL 服务器提供的,而是由表存储引擎自身或本机分区处理程序提供的。在 MySQL 9.0 中,只有 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”。