您的位置:首页 > 数据库 > MySQL

MySQL表分区(2)列表分区-list

2016-08-05 15:05 197 查看
list列表分区和range分区应该说都是一样的,不同的是range分区在分区时的依据是一段连续的区间,而list分区时依据是一组分布的散列值。

创建表分区

partition by list(expr)
  “expr” 是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“values in (value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。注释:在MySQL 5.1中,当使用LIST分区时,有可能只能匹配整数列表。

<span style="font-family:FangSong_GB2312;">create table student
  (id varchar(20) not null ,
  studentno int(20) not null,
  name varchar(20),
  age varchar(20)
  )
 partition by list(studentno)
 (
   partition p1 values in (1,2,3,4),
   partition p2 values in (5,6,7,8),
   partition p3 values in (9,10,11)
 );
</span>
如上创建表student,可以理解为将学号1-11的学生分为三个组,分别为p1、p2、p3三个分区。需要注意的是一般情况下,针对表的分区字段为int等数值类型。

优点

  这使得在表中增加或删除指定组的学生记录变得容易起来。例如,假定要删除p1组的所有学员。查询“ALTER TABLE student(表名) DROP PARTITION p1(分区名);”来进行删除,这种操作方式比同样作用的删除作用的“delete from student where studentno IN (1,2,3,4)要有效果的多,我看到可怕的“in”。
【注意】:如果试图插入列值(或分区表达式的返回值)不在分区值列表中的一行时。即这是11个学生已经分好组了,要再来一个学生那可不行了,就这么多。“INSERT”将失败并报错。例如,假定LIST分区的采用上面的方案,下面的查询将失败:



  这是因为“studentno”列值12不能在用于定义分区p1, p2, p3l的列表中找到。所以插入12列时不知道要放到那个分区。要重点注意的是,LIST分区没有类似如“VALUES LESS THAN MAXVALUE”这样的包含其他值在内的定义。将要匹配的任何值都必须在值列表中找到。LIST分区除了能和RANGE分区结合起来生成一个复合的子分区,与HASH和KEY分区结合起来生成复合的子分区也是可以的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: