mysql分区之LIST分区讲解

   mysql分区之LIST分区讲解

  MySQL中的LIST分区在很多方面类似于RANGE分区。和按照RANGE分区一样,每个分区必须明确定义。它们的主要区别在于,LIST分区中每个分区的定义和选择是基于某列的值从属于一个值列表集中的一个值,而RANGE分区是从属于一个连续区间值的集合。LIST分区通过使用“PARTITION BY LIST(expr)”来实现,其中“expr” 是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“VALUES IN (value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。

  注释:在MySQL 5.1中,当使用LIST分区时,有可能只能匹配整数列表。

  不像按照RANGE定义分区的情形,LIST分区不必声明任何特定的顺序 。

  对于下面给出的例子,我们假定将要被分区的表的基本定义是通过下面的“CREATE TABLE”语句提供的:

  CREATE TABLE employees (

  id INT NOT NULL,

  fname VARCHAR(30),

  lname VARCHAR(30),

  hired DATE NOT NULL DEFAULT '1970-01-01',

  separated DATE NOT NULL DEFAULT '9999-12-31',

  job_code INT,

  store_id INT

  );

  (这和18.2.1节,“RANGE分区” 中的例子中使用的是同一个表)。

  假定有20个音像店,分布在4个有经销权的地区,如下表所示:

  地区商店ID 号

  北区3, 5, 6, 9, 17

  东区1, 2, 10, 11, 19, 20

  西区4, 12, 13, 14, 18

  中心区7, 8, 15, 16

  要按照属于同一个地区商店的行保存在同一个分区中的方式来分割表,可以使用下面的“CREATE TABLE”语句:

  CREATE TABLE employees (

  id INT NOT NULL,

  fname VARCHAR(30),

  lname VARCHAR(30),

  hired DATE NOT NULL DEFAULT '1970-01-01',

  separated DATE NOT NULL DEFAULT '9999-12-31',

  job_code INT,

  store_id INT

  )

  PARTITION BY LIST(store_id)

  PARTITION pNorth VALUES IN (3,5,6,9,17),

  PARTITION pEast VALUES IN (1,2,10,11,19,20),

  PARTITION pWest VALUES IN (4,12,13,14,18),

  PARTITION pCentral VALUES IN (7,8,15,16)

  );

  这使得在表中增加或删除指定地区的雇员记录变得容易起来。例如,假定西区的所有音像店都卖给了其他公司。那么与在西区音像店工作雇员相关的所有记录(行)可以使用查询“ALTER TABLE employees DROP PARTITION pWest;”来进行删除,它与具有同样作用的DELETE (删除)查询“DELETE query DELETE FROM employees WHERE store_id IN (4,12,13,14,18);”比起来,要有效得多。

  要点:如果试图插入列值(或分区表达式的返回值)不在分区值列表中的一行时,那么“INSERT”查询将失败并报错。例如,假定LIST分区的采用上面的方案,下面的查询将失败:

  INSERT INTO employees VALUES

  (224, 'Linus', 'Torvalds', '2002-05-01', '2004-10-12', 42, 21);

  这是因为“store_id”列值21不能在用于定义分区pNorth, pEast, pWest,或pCentral的值列表中找到。要重点注意的是,LIST分区没有类似如“VALUES LESS THAN MAXVALUE”这样的包含其他值在内的定义。将要匹配的任何值都必须在值列表中找到。

  LIST分区除了能和RANGE分区结合起来生成一个复合的子分区,与HASH和KEY分区结合起来生成复合的子分区也是可能的。

时间: 2024-09-14 06:50:13

mysql分区之LIST分区讲解的相关文章

mysql分区之RANGE分区讲解

  mysql分区之RANGE分区讲解 按照RANGE分区的表是通过如下一种方式进行分区的,每个分区包含那些分区表达式的值位于一个给定的连续区间内的行.这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符来进行定义.在下面的几个例子中,假定你创建了一个如下的一个表,该表保存有20家音像店的职员记录,这20家音像店的编号从1到20. CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHA

高性能的MySQL(7)分区技术详解

在我之前的2篇博客中已经简单介绍过MySQL5.1之后的分区技术的基本理论和分区技术的表存储文件及特点,博客地址如下: http://janephp.blog.51cto.com/4439680/1305220 http://janephp.blog.51cto.com/4439680/1305937 今天要介绍一下分区技术一些使用场景和机制. MySQL实现分区表的方式--对底层表封装--意味着索引也按照分区的子表定义的,而没有全局索引. 一.在下面的场景中,作用非常大: 1.表非常大无法全部

mysql-为什么MySQL增加了partitions 分区后原来分区的table_rows就变了

问题描述 为什么MySQL增加了partitions 分区后原来分区的table_rows就变了 然后我插入了三条数据,现在tablerows为3 执行增加分区 然后,tablerows 变成2了 但是,我看数据库里面的数据没有变,请问这是怎么一回事?

mysql分区之range分区

随着互联网的发展,各方面的数据越来越多,从最近两年大数据越来越强的呼声中就可见一斑. 我们所做的项目虽算不上什么大项目,但是由于业务量的问题,数据也是相当的多. 数据一多,就很容易出现性能问题,而为了解决这个问题我们通常很容易想到集群.分片等. 但是在某些时候却不一定必须要用集群.分片,也可以适当的使用数据分区. 什么是分区? (以下引用自:http://wangweiak47.blog.51cto.com/2337362/1602422/) MySQL在未启用分区功能时,数据库的单个表内容是以

mysql分表,分区的区别和联系

一,什么是MySQL分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,具体请参考mysql分区功能详细介绍,以及实例 二,mysql分表和分区有什么区别呢 1,实现方式上 a),mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件. Java代码   [root@BlackGh

mysql分表和分区的区别浅析_Mysql

一.什么是mysql分表和分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上 二.mysql分表和分区有什么区别呢 1.实现方式上 a)mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件. 复制代码 代码如下: [root@BlackGhost test]# ls |grep use

MSSQL表分区的创建详细讲解过程

首先创建新的数据库文件,分别放到我本机的D:SPPartition文件夹下的FirstPart,SecondPart,ThirdPart文件夹,新建3个文件文件分别对应3个文件组,以我本机中存在的数据库CenterMy为例子,它现在有个表TestSP,这是一个用户表,现在测试数据只有1000多条数据,创建代码如下:  代码如下 复制代码 ALTER DATABASE CenterMy ADD FILEGROUP FGSP1 GO ALTER DATABASE CenterMy     ADD F

linux磁盘分区、静态分区和LVM

1.虚拟内存技术,windows通过交换文件来实现,linux通过交换分区来实现.所以windows只有一个分区,而安装linux至少两个分区,其中一个就是交换分区,虚拟内存一定程度上可以解决内存不够的问题. 2.硬盘在使用之前必须分区,硬盘分区有主分区,扩展分区和逻辑分区之分,一块硬盘最多只能有四个主分区,其中一个主分区可以用一个扩展分区来代替,只能有一块扩展分区,这个扩展分区可以划分多个逻辑分区 3.linux磁盘设备和分区命名 第一块IDE硬盘叫做/dev/hda,第二块IDE叫做/dev

Oracle分区之四:分区维护和管理

一,分区表的相关实验 创建一个列表分区表 create table t3(id number,city varchar2(10)) partition by list(city) ( partition p1 values ('SH','JS','ZJ') , partition p2 values ('BJ','TJ','HB') , partition p3 values ('GZ','SZ') , partition p_others values (default) ); create