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

22.2分区类型

本节讨论MySQL 5.7中可用的分区类型。其中包括以下列出的类型:

  • 范围分区。这种类型的分区根据给定范围内的列值将行分配给分区。看到第22.2.1节,“范围分区”.有关此类型的扩展的信息,请范围列,请参阅第22.2.3.1节,“RANGE列分区”

  • 分区列表。类似于按范围,除非分区是基于匹配一组离散值之一的列选择的。看到第22.2.2节,“LIST分区”.有关此类型的扩展的信息,请名单列,请参阅第22.2.3.2节,“LIST列分区”

  • 散列分区。使用这种类型的分区,根据用户定义的表达式返回的值选择分区,该表达式对要插入到表中的行中的列值进行操作。该函数可以由MySQL中产生非负整数值的任何有效表达式组成。这种类型的扩展,线性散列,也是可用的。看到第22.2.4节,“HASH分区”

  • 关键的分区。这种类型的分区类似于按哈希除了只提供一个或多个要计算的列之外,MySQL服务器提供了自己的哈希函数。这些列可以包含除整数值以外的其他值,因为MySQL提供的哈希函数可以保证不管列数据类型是什么,结果都是整数值。这种类型的扩展,线性关键,也是可用的。看到第22.2.5节,“键分区”

数据库分区的一个非常常见的用法是按日期隔离数据。一些数据库系统支持显式的日期分区,MySQL在5.7中没有实现。然而,在MySQL中创建分区方案并不困难日期时间,或DATETIME列,或基于使用此类列的表达式。

当分区时关键线性关键,你可以使用a日期时间,或DATETIME列作为分区列,而无需对列值进行任何修改。例如,这个表创建语句在MySQL中是完全有效的:

CREATE TABLE member (firstname VARCHAR(25) NOT NULL, lastname VARCHAR(25) NOT NULL, username VARCHAR(16) NOT NULL, email VARCHAR(35), joined DATE NOT NULL) PARTITION BY KEY(joined) PARTITIONS 6;

在MySQL 5.7中,也可以使用日期DATETIME列作为分区列使用范围列而且名单列分区。

MySQL的其他分区类型,然而,需要一个分区表达式,产生一个整数值或.如果您希望使用基于日期的分区范围列表哈希,或线性散列,您可以简单地使用一个函数来操作日期时间,或DATETIME列并返回这样的值,如下所示:

CREATE TABLE member (firstname VARCHAR(25) NOT NULL, lastname VARCHAR(25) NOT NULL, username VARCHAR(16) NOT NULL, email VARCHAR(35), join DATE NOT NULL) PARTITION BY RANGE(YEAR(joined)) (PARTITION p0 VALUES小于(1960),PARTITION p1 VALUES小于(1970),PARTITION p2 VALUES小于(1980),PARTITION p3 VALUES小于(1990),PARTITION p4 VALUES小于MAXVALUE);

使用日期划分的其他示例可以在本章的以下部分找到:

有关基于日期的分区的更复杂示例,请参阅以下部分:

对MySQL分区进行了优化,以便与TO_DAYS ()年(),TO_SECONDS ()功能。但是,您可以使用其他日期和时间函数返回整数或,例如工作日()DAYOFYEAR (),或月().看到第12.7节“日期和时间函数”,以了解更多有关这些功能的资料。

重要的是要记住,无论您使用哪种分区类型,分区总是在创建时自动编号并按顺序编号,从0.在向分区表中插入新行时,正是使用这些分区号来标识正确的分区。例如,如果您的表使用了4个分区,那么这些分区将被编号012,3..为范围而且列表分区类型时,有必要确保为每个分区号定义一个分区。为哈希分区时,用户提供的表达式必须计算为大于的整数值0.为关键分区,这个问题由MySQL服务器内部使用的哈希函数自动处理。

分区的名称通常遵循管理其他MySQL标识符的规则,例如表和数据库的标识符。但是,您应该注意,分区名称不区分大小写。例如创建表语句失败,如下所示:

mysql> CREATE TABLE t2 (val INT) -> PARTITION BY LIST(val)(-> PARTITION mypart VALUES IN (1,3,5), -> PARTITION mypart VALUES IN (2,4,6) ->);错误1488 (HY000):重复分区名称mypart

发生失败是因为MySQL看不到分区名称之间的差异mypart而且MyPart

在为表指定分区数时,必须将其表示为正数、不带前导零的非零整型文字,并且不能是表达式,例如0.8 e + 016 - 2,即使它的计算结果为整数值。小数是不允许的。

在接下来的章节中,我们不一定会提供用于创建每种分区类型的语法的所有可能形式;这一信息可以在第13.1.18节“CREATE TABLE语句”