与存储引擎有关的分区限制
在MySQL 8.0中,分区支持实际上不是由MySQL Server提供的,而是由表存储引擎自己或本机的分区处理程序提供的。在MySQL 8.0中,仅InnoDB
存储引擎提供了本机分区处理程序。这意味着不能使用任何其他存储引擎来创建分区表。
注意MySQL Cluster的
NDB
存储引擎还提供了本机分区支持,但MySQL 8.0当前不支持。
ALTER TABLE ... OPTIMIZE PARTITION
不适用于使用的分区表InnoDB
。对于此类表,请使用ALTER TABLE ... REBUILD PARTITION
和ALTER TABLE ... ANALYZE PARTITION
。有关更多信息,请参见“ ALTER TABLE分区操作”。
用户定义的分区和NDB存储引擎(NDB群集)。按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 TABLE
不允许ALTER TABLE
导致用户分区NDB
表不满足以下两个要求中的一个或两个的语句,并且这些语句失败并出现错误:
- 该表必须具有显式主键。
- 该表的分区表达式中列出的所有列都必须是主键的一部分。
例外。如果NDB
使用空列列表(即使用PARTITION BY KEY()
或PARTITION BY LINEAR KEY()
)创建了用户分区表,则不需要显式主键。
升级分区表。执行升级时,KEY
必须转储并重新加载按分区的表。使用非存储引擎的分区表InnoDB
无法从MySQL 5.7或更早版本升级到MySQL 8.0或更高版本;您必须在升级之前从此类表中删除分区,ALTER TABLE ... REMOVE PARTITIONING
或将其转换为InnoDB
using ALTER TABLE ... ENGINE=INNODB
。
有关将MyISAM
表转换为的信息InnoDB
,请参见“将表从MyISAM转换为InnoDB”。