在 MySQL 8.0 中,分区支持实际上并不是由 MySQL 服务器提供的,而是由表存储引擎自己的或本机分区处理程序提供的。在 MySQL 8.0 中,只有InnoDB
和NDB
存储引擎提供本机分区处理程序。这意味着不能使用除这些以外的任何其他存储引擎来创建分区表。(您必须使用带有
NDB
存储引擎的 MySQL NDB Cluster 来创建
NDB
表。)
InnoDB 存储引擎。
InnoDB
外键和 MySQL 分区不兼容。分区
InnoDB
表不能有外键引用,也不能有外键引用的列。InnoDB
不能对具有外键或被外键引用的表进行分区。
ALTER
TABLE ... OPTIMIZE PARTITION
不能与使用InnoDB
. 而是对此类表使用
ALTER TABLE ... REBUILD PARTITION
and
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 TABLE
ALTER
TABLE
不允许使用会导致用户分区
NDB
表不满足以下两个要求中的一个或两个的语句,并且会失败并出现错误
:
该表必须具有明确的主键。
表的分区表达式中列出的所有列都必须是主键的一部分。
例外。
如果用户分区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”。