当前位置:嗨网首页>书籍在线阅读

05-List 分区

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

LIST分区是建立离散的值列表告诉数据库特定的值属于哪个分区,LIST分区在很多方面类似于RANGE分区,区别在LIST分区是从属于一个枚举列表的值的集合,RANGE分区是从属于一个连续区间值的集合。

LIST分区通过使用PARTITION BY LIST(expr)子句来实现,expr是某列值或一个基于某列值返回一个整数值的表达式,然后通过VALUES IN(value_list)的方式来定义分区,其中value_list是一个逗号分隔的整数列表。与RANGE分区不同,LIST分区不必声明任何特定的顺序,例如:

mysql> CREATE TABLE expenses (

-> expense_date DATE NOT NULL,

-> category INT,

-> amount DECIMAL (10,3)

-> )PARTITION BY LIST(category) (

-> PARTITION p0 VALUES IN (3, 5),

-> PARTITION p1 VALUES IN (1, 10),

-> PARTITION p2 VALUES IN (4, 9),

-> PARTITION p3 VALUES IN (2),

-> PARTITION p4 VALUES IN (6)

-> );

Query OK, 0 rows affected (0.09 sec)

注意:在MySQL 5.1中,LIST分区只能匹配整数列表。category只能是 INT类型,所以需要额外的转换表来记录类别编号和类别的名称。

如果试图插入的列值(或者分区表达式的返回值)不包含分区值列表中时,那么 INSERT操作会失败并报错。要重点注意的是,LIST分区不存在类似VALUES LESS THAN MAXVALUE这样包含其他值在内的定义方式。将要匹配的任何值都必须在值列表中找得到。

由于MySQL 5.5中支持非整数分区,所以创建LIST分区就不需要额外的转换表:

mysql> CREATE TABLE expenses (

-> expense_date DATE NOT NULL,

-> category VARCHAR(30),

-> amount DECIMAL (10,3)

-> )PARTITION BY LIST COLUMNS (category) (

-> PARTITION p0 VALUES IN ( 'lodging', 'food'),

-> PARTITION p1 VALUES IN ( 'flights', 'ground transportation'),

-> PARTITION p2 VALUES IN ( 'leisure', 'customer entertainment'),

-> PARTITION p3 VALUES IN ( 'communications'),

-> PARTITION p4 VALUES IN ( 'fees')

-> );

Query OK, 0 rows affected (0.07 sec)