相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.4 kb
手册页(Zip)- 347.0 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

22.2.5 KEY Partitioning

按键分区类似于按哈希分区,不同之处是哈希分区使用用户定义的表达式,键分区的哈希函数是由MySQL服务器提供的。NDB集群使用MD5 ()为此目的;对于使用其他存储引擎的表,服务器使用自己的内部哈希函数,该函数基于相同的算法密码()

的语法规则创建表…按键分区类似于创建按散列分区的表。主要区别如下:

  • 关键而不是哈希

  • 关键只接受零个或多个列名的列表。任何用作分区键的列都必须包含表的部分或全部主键(如果表有主键的话)。如果没有指定列名作为分区键,则使用表的主键(如果有的话)。例如创建表语句在MySQL 5.7中有效:

    CREATE TABLE k1 (id INT NOT NULL PRIMARY KEY, name VARCHAR(20))

    如果没有主键但有唯一键,则分区键使用唯一键:

    CREATE TABLE k1 (id INT NOT NULL, name VARCHAR(20), UNIQUE KEY(id))

    但是,如果唯一键列没有定义为非空,则前面的语句将失败。

    在这两种情况下,分区键都是id列的输出中没有显示显示创建表或者在PARTITION_EXPRESSION的列INFORMATION_SCHEMA。分区表格

    与其他分区类型不同的是,列用于分区关键不限制为整数或值。例如创建表语句有效:

    创建表tm1 (s1 CHAR(32))分区

    前面的语句将如果要指定不同的分区类型,则该参数有效。(在这种情况下,简单地使用按键()分区也是有效的,和分区键(s1),因为s1是表的主键。)

    有关此问题的详细信息,请参见第22.6节“分区的限制和限制”

    分区键中不支持带索引前缀的列。这意味着字符VARCHAR二进制,VARBINARY列可以在分区键中使用,只要它们不使用前缀;因为必须指定前缀而且文本索引定义中的列,不能在分区键中使用这两种类型的列。在MySQL 5.7中,当创建、修改或升级分区表时,使用前缀的列是允许的,即使它们不包括在表的分区键中。这是MySQL 5.7中的一个已知问题,在MySQL 8.0中已经解决了这个问题,在MySQL 8.0中这种允许行为已被弃用,并且当试图在这些情况下使用这些列时,服务器会显示适当的警告或错误。看到键分区不支持列索引前缀,以了解更多资料及例子。

    请注意

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

    的显式分区方案NDB表,表必须有一个显式的主键,分区表达式中使用的任何列都必须是这个键的一部分。但是,如果表使用分区表达式,即,按键()分区如果没有列引用,则不需要显式主键。

    可以使用ndb_desc实用程序(使用- p选项)。

    重要的

    对于键分区的表,不能执行修改表删除主键,因为这样做会生成错误错误1466 (HY000):分区函数字段列表中的字段在表中没有找到。对于分区的NDB集群表,这不是一个问题关键;类对表进行重新组织隐藏的主键作为表的新分区键。看到21章,MySQL NDB集群7.5和NDB集群7.6

也可以用线性键来划分一个表。这里有一个简单的例子:

CREATE TABLE tk (col1 INT NOT NULL, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR KEY (col1) PARTITIONS 3;

使用线性有同样的效果关键分区的时候哈希分区,使用2的幂算法而不是模数算法导出分区号。看到第22.2.4.1节,“线性HASH分区”参阅此算法的描述及其含义。