mysql key分区_mysql8 参考手册-KEY 分区

KEY分区类似于按哈希分区,除了在哈希分区采用用户定义的表达式的情况下,用于键分区的哈希函数由MySQL服务器提供。NDB群集 MD5()用于此目的;对于使用其他存储引擎的表,服务器使用其自己的内部哈希功能。

语法规则CREATE TABLE ... PARTITION BY KEY类似于用于创建按哈希分区的表的语法规则。主要区别如下:

KEY用于而不是 HASH。

KEY仅接受零个或多个列名的列表。如果表有一个主键,则用作分区键的任何列都必须包含表的主键的一部分或全部。如果没有将列名指定为分区键,则使用表的主键(如果有)。例如,以下 CREATE TABLE语句在MySQL 8.0中有效:

CREATE TABLE k1 (

id INT NOT NULL PRIMARY KEY,

name VARCHAR(20)

)

PARTITION BY KEY()

PARTITIONS 2;

如果没有主键,但是有一个唯一键,则将唯一键用于分区键:

CREATE TABLE k1 (

id INT NOT NULL,

name VARCHAR(20),

UNIQUE KEY (id)

)

PARTITION BY KEY()

PARTITIONS 2;

但是,如果唯一键列未定义为 NOT NULL,则前一条语句将失败。

在这两种情况下,即使分区键id未显示在表的输出SHOW CREATE TABLE或 表的 PARTITION_EXPRESSION列中 ,该键也是该 列INFORMATION_SCHEMA.PARTITIONS。

与其他分区类型不同,用于分区依据的列KEY不限于整数或NULL值。例如,以下CREATE TABLE语句有效:

CREATE TABLE tm1 (

s1 CHAR(32) PRIMARY KEY

)

PARTITION BY KEY(s1)

PARTITIONS 10;

前面的语句将不会是有效的,将被指定不同的分区类型。(在这种情况下,简单地使用PARTITION BY KEY()也是有效的,并且具有与相同的效果PARTITION BY KEY(s1),因为 s1它是表的主键。)

分区键不支持带有索引前缀的列。这意味着 CHAR, VARCHAR, BINARY,和 VARBINARY列可以在一个分区键,因为他们不使用前缀使用,只要; 因为必须为BLOB和 指定前缀 TEXT索引定义中的列,则不能在分区键中使用这两种类型的列。在MySQL 8.0.21之前,创建,更改或升级分区表时允许使用前缀的列,即使它们未包含在表的分区键中也是如此;在MySQL 8.0.21和更高版本中,不赞成使用这种允许的行为,并且当使用一个或多个此类列时,服务器会显示适当的警告或错误。有关更多信息和示例,请参阅 键分区不支持的列索引前缀。

注意

使用NDB存储引擎KEY的表由隐式分区 ,使用表的主键作为分区键(与其他MySQL存储引擎一样)。如果NDB群集表没有显式主键,则 存储引擎为每个NDB群集表生成的“ 隐藏 ”主键NDB将用作分区键。

如果为NDB表定义显式分区方案 ,则表必须具有显式主键,并且分区表达式中使用的任何列都必须是该键的一部分。但是,如果表使用“ 空 ”分区表达式(即PARTITION BY KEY()没有列引用),则不需要显式主键。

您可以使用ndb_desc实用程序(带有该 -p选项)观察该分区 。

重要

对于键分区表,您无法执行 ALTER TABLE DROP PRIMARY KEY,因为这样做会产生错误ERROR 1466(HY000):在table中找不到分区函数的字段列表中的字段。对于由分区的NDB群集表,这不是问题KEY。在这种情况下,表将使用“ hidden ”主键作为表的新分区键进行重组 。请参见第22章,MySQL NDB Cluster 8.0。

也可以通过线性键对表进行分区。这是一个简单的示例:

CREATE TABLE tk (

col1 INT NOT NULL,

col2 CHAR(5),

col3 DATE

)

PARTITION BY LINEAR KEY (col1)

PARTITIONS 3;

所述LINEAR关键字对相同的效果 KEY分隔因为它在 HASH分区,使用权力-的二个一个算法,而不是模运算而导出的分区号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值