相关文件10bet官方网站 下载本手册 从本手册中摘录

24.2.5关键分区

按键分区类似于散列的分区,除了散列分区采用用户定义的表达式之外,MySQL Server提供了用于密钥分区的散列函数。NDB集群使用MD5()以此目的;对于使用其他存储引擎的表,服务器采用其自己的内部散列函数。

语法规则创建表...按键分区类似于创建由哈希分区的表的那些。此处列出了主要差异:

  • 钥匙使用而不是哈希

  • 钥匙只占用零个或多个列名的列表。如果表格有一个,则使用用作分区密钥的任何列必须包含零件或全部。如果没有将列名指定为分区密钥,则使用表的主键,如果有一个。例如,以下创建表声明在MySQL 8.0中有效:

    通过key()分区2,创建表k1(ID int not noul null主键,name varchar(20))分区;

    如果没有主键,但有一个唯一的键,则唯一密钥用于分区密钥:

    CREATE TABLE K1(ID INT NOT NULL NULL,NAME VARCHAR(20),按键()分区2的分区;

    但是,如果唯一的键列未被定义为没有空,然后前一个陈述将失败。

    在这两个情况下,分区密钥是ID列,即使它未在输出中显示显示创建表或者在partition_expression.栏目Information_schema.Partitions.桌子。

    与其他分区类型的情况不同,用于划分的列钥匙不限于整数或空值价值观。例如,以下创建表声明有效:

    通过键(S1)分区10创建表TM1(S1 Char(32)主键)分区;

    前面的陈述将不是有效,是要指定不同的分区类型。(在这种情况下,只需使用按键分区()也有效并具有相同的效果按键分区(S1), 自从S1表的主键是。)

    有关此问题的其他信息,请参阅第24.6节“分区的限制和限制”

    分区键不支持具有索引前缀的列。这意味着charvarchar.二进制, 和varbinary.可以在分区密钥中使用列,只要它们不采用前缀;因为必须指定前缀斑点文本索引定义中的列,无法在分区密钥中使用这两种类型的列。在MySQL 8.0.21之前,在创建,更改或升级分区表时允许使用前缀的列,即使它们不包含在表的分区密钥中;在MySQL 8.0.21及更高版本中,不推荐使用此允许行为,并且服务器在使用一个或多个此类列时显示适当的警告或错误。看密钥分区不支持列索引前缀,有关更多信息和示例。

    笔记

    表使用的表格NDB.存储引擎隐式划分钥匙,使用表的主键作为分区密钥(与其他MySQL存储引擎一样)。如果NDB群集表没有显式主键,则由此产生的主要键NDB.每个NDB群集表的存储引擎用作分区键。

    如果您定义了一个显式分区方案NDB.表,表必须具有显式主键,并且分区表达式中使用的任何列必须是此键的一部分。但是,如果表使用了空的分区表达式 - 即按键分区()没有列引用 - 然后不需要显式主键。

    您可以使用该分区使用ndb_desc.效用(与-P.选项)。

    重要的

    对于键分区表,无法执行更改表丢弃主键,这样做会产生错误错误1466(hy000):字段中未在表中找不到的分区功能列表中的字段。这不是NDB群集表的问题,该表钥匙;在这种情况下,该表将使用该表进行重新组织主键作为表的新分区密钥。看第23章,MySQL NDB集群8.0

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

通过线性键(COL1)分区3,创建表TK(Col1 Int Not Null,Col2 Char(5),Col3日期)分区;

线性关键字对此效果相同钥匙分区正如在那样哈希分区,使用两个算法而不是模数算法导出分区号。看第24.2.4.1节“线性哈希分区”,用于描述该算法及其含义。