MySQL 8.0版本说明
MySQL 8.0源代码文档10bet官方网站
MySQL 8.0提供支持名单列
分区。这是一种变体列表
允许使用多个列作为分区键的分区,并允许使用非整数类型的数据类型列作为分区列;你可以使用字符串类型,日期
,DATETIME
列。有关允许的数据类型的详细信息列
分区列,看到第24.2.3节,“列分区”)。
假设你有一个在12个城市拥有客户的企业,出于销售和营销的目的,你将其组织成4个区域,每个区域3个城市,如下表所示:
地区 | 城市 |
---|---|
1 | 奥斯卡,Hogsby蓬莱蕉 |
2 | Vimmerby、Hultsfred Vastervik |
3. | Nassjo、Eksjo Vetlanda |
4 | Uppvidinge、Alvesta Vaxjo |
与名单列
分区时,您可以为客户数据创建一个表,根据客户所在城市的名称将一行分配给对应于这些区域的4个分区中的任意一个,如下所示:
CREATE TABLE customers_1 (first_name VARCHAR(25), last_name VARCHAR(25), street_1 VARCHAR(30), street_2 VARCHAR(30), city VARCHAR(15),更新日期)PARTITION BY LIST COLUMNS(city) (PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'), PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'), PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'), PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo'));
就像用范围列
,则不需要使用表达式列()
子句将列值转换为整数。(事实上,不允许使用列名以外的表达式列()
)。
它也可以使用日期
而且DATETIME
列,如下示例所示,该示例使用与类相同的名称和列customers_1
表所示,但采用名单列
的分区更新
列将行存储在4个分区中的一个,这取决于2010年2月客户的帐户计划更新的星期:
CREATE TABLE customers_2 (first_name VARCHAR(25), last_name VARCHAR(25), street_1 VARCHAR(30), street_2 VARCHAR(30), street_2 VARCHAR(30), city VARCHAR(15), renewal DATE) PARTITION BY LIST COLUMNS(renewal) (PARTITION pWeek_1 VALUES IN('2010-02-01', '2010-02-02', '2010-02-03', '2010-02-04', '2010-02-05', '2010-02-06', '2010-02-07'), PARTITION pWeek_2 VALUES IN('2010-02-08', '2010-02-09', '2010-02-10', '2010-02-11', '2010-02-12', '2010-02-13', '2010-02-14'), PARTITION pWeek_3 VALUES IN('2010-02-15', '2010-02-16',“2010-02-17”,“2010-02-18”,“2010-02-19”,“2010-02-20”,“2010-02-21”),分区pWeek_4值(“2010-02-22”,“2010-02-23”,“2010-02-24”,“2010-02-25”,“2010-02-26”,“2010-02-27”,“2010-02-28”));
这是可行的,但是如果涉及的日期数量变得非常大,那么定义和维护就会变得非常麻烦;在这种情况下,通常采用更实际的方法范围
或范围列
分区。在本例中,因为我们希望用作分区键的列是a日期
列中,我们使用范围列
分区,如下所示:
CREATE TABLE customers_3 (first_name VARCHAR(25), last_name VARCHAR(25), street_1 VARCHAR(30), street_2 VARCHAR(30), city VARCHAR(15), renew DATE) PARTITION BY RANGE COLUMNS(renew) (PARTITION pWeek_1 VALUES小于('2010-02-09'),PARTITION pWeek_2 VALUES小于('2010-02-15'),PARTITION pWeek_3 VALUES小于('2010-02-22'),PARTITION pWeek_4 VALUES小于('2010-03-01'));
看到第24.2.3.1节,“RANGE COLUMNS分区”,以查询更多资料。
此外(如……范围列
分区)时,可以使用多个列列()
条款。
看到第13.1.20节," CREATE TABLE语句",以获取有关按列表列进行分区()
语法。