分区简单介绍

介绍

KEY分区和HASH分区相似,但是KEY分区支持除text和BLOB之外的具有数据类型的分区,而HASH分区只援助数字分区,KEY分区分裂意行使用户自定义的表明式实行分区,KEY分区使用系统提供的HASH函数实行分区。当表中存在主键恐怕唯一键时,要是成立key分区时并未有点名字段系统暗许会首要推荐主键列作为分区字列,借使不存在主键列会选取非空唯一键列作为分区列,注意唯一列作为分区列唯壹列不能够为null。

 

 

MySQL KEY分区,mysqlkey分区

 

总结MySQL的分区,总结MySQL分区

前言

    
分区是指遵照早晚的平整将二个大表分解成七个越来越小的有个别,那里的条条框框1般正是使用分区规则将表进行水平切分;逻辑上从未有过产生变化但实际上表已经被拆分成了多少个概略对象,每一种分成被细分成了三个独门的对象。相对于尚未分区的当个表来说分区的表有诸多的优势包蕴:
并发总结查询、神速归档删除分区数据、分散储存、查询质量更佳。

mysql5.7后头查询语句协助钦命分区例如:“
SELECT * FROM t PARTITION (p0,p1) WHERE c < 5
”钦赐分区同样适用DELETE, INSERT, REPLACE, UPDATE, and LOAD DATA, LOAD XML.

数据库版本:mysql5.七.1二 

是不是扶助分区

SHOW PLUGINS ;

997755.com澳门葡京 1

查询partition的的状态是active就意味着援救分区,假诺是源码安装的话在编写翻译的历程中要抬高“-DWITH_PARTITION_STORAGE_ENGINE=1 \”。

留神: MEKoleosGE, CSV, or
FEDERATED存款和储蓄引擎不帮衬分区,同三个表全数的分区必须运用同样的储存引擎,不可能分区一施用MYISAM分区二又选取INNODB;不相同的分区表能够是例外的积存引擎。

分区介绍

眼下mysql可用的分区类型首要有以下两种:

    
RANGE分区:依照3个加以的连天区间范围,RANGE重尽管根据整数的分区,对于非整形的字段需求动用表明式将其转换到整形。

     LIST分区:是依照列出的枚举值列表举办分区。

    
COLUMNS分区:能够不必通过表明式举行转移直接对非整形字段实行分区,同时COLUMNS分区还援助八个字段组合分区,唯有RANGELIST存在COLUMNS分区,COLUMNS是RANGE和LIST分区的晋升。

     
997755.com澳门葡京 ,HASH分区:基于给定的分区个数,将数据分配到分裂的分区,HASH分区只好针对整数进行HASH,对于非整形的字段只可以通过表达式将其调换来整数。

     
KEY分区:帮忙除text和BLOB之外的富有数据类型的分区,key分区能够一向基于字段做分区无需转换来整数。 

说明

      一.注意分区名的尺寸写敏感难点,和首要字难题。

      二.无论哪一类分区类型,要么分区表中未有主键或唯一键,要么主键或唯1键包涵在分区列里面,对于存在主键或然唯一键的表无法应用主键只怕唯1键之外的字段作为分区字段。

      三.5.7在此以前的本子显得分区的试行安顿选用:explain
PARTITIONS;伍.⑦从此直接推行:explain

      4.从未强制供给分区列非空,提出分区的列为NOT NULL的列;在RANGE
分区中只要往分区列中插入NULL值会被用作最小的值来拍卖,在LIST分区中NULL值必须在枚举列表中否则插入失利,在HASH/KEY分区中NULL值会被当作0来处理。

      5.基于时间项指标字段的更动函数mysql提供了”YEATucson(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()”

     
6.拆分合并分区后会导致修改的分区的总计新闻失效,未有改造的分区的计算音信还在,不影响新插入的值参加到总计消息;那时必要对表实践Analyze操作.

      7.针对非整形字段进行RANG\LIST分区建议利用COLUMNS分区。 

剔除扩大分区

在各种分区内容介绍中详尽介绍了每一种分区的用法,不过都以介绍在创制表的时候成立分区和改造删除分区单个,也得以在一张已经存在的表中参与分区,能够一遍性删除全部表的分区。

壹.移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

小心:使用remove移除分区是独自移除分区的定义,并不会删除数据和drop
PARTITION分裂等,后者会连同数据一同删除

二.对已经存在记录的表创制分区,以扩张range分区为例,和开创表建分区的语法同样。

ALTER TABLE `tb_partition`.`tb_varchar` 
PARTITION BY RANGE(id) PARTITIONS 3( PARTITION part0 VALUES LESS THAN (5000), PARTITION part1 VALUES LESS THAN (10000), PARTITION part2 VALUES LESS THAN (MAXVALUE)) ;

只顾:对已有个别表创造分区之后,数据会遵照分区的定义分布到各样分区文件个中

总结

上述正是MySQL的分区介绍总计的全体内容,希望本文对我们利用mysql的时候全数支持。

前言
分区是指依照早晚的条条框框将三个大表分解成多少个更加小的有的,那里的规则一般正是行使分区规则将表进…

一、常规KEY

一.开立分区

CREATE TABLE tb_key (
    id INT ,
    var CHAR(32) 
)
PARTITION BY KEY(var)
PARTITIONS 10;

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tb_key';

INSERT INTO tb_key() VALUES(1,'星期一'),(2,'1998-10-19'),(3,'new'),(4,'非常好'),(5,'5');

997755.com澳门葡京 2

介绍

KEY分区和HASH分区相似,可是KEY分区辅助除text和BLOB之外的享有数据类型的分区,而HASH分区只支持数字分区,KEY分区分歧意利用用户自定义的表明式举办分区,KEY分区使用系统提供的HASH函数进行分区。当表中留存主键可能唯1键时,假如成立key分区时不曾点名字段系统暗许会首荐主键列作为分区字列,倘若不存在主键列会选拔非空唯一键列作为分区列,注意唯一列作为分区列唯壹列无法为null。

 

 

MySQL自伍.壹起始对分区(Partition)有支撑。

二、LINEAR KEY

平等key分区也设有线性KEY分区,概念和线性HASH分区同样。

一.开立分区

CREATE TABLE tb_keyline (
    id INT NOT NULL,
    var CHAR(5)
)
PARTITION BY LINEAR KEY (var)
PARTITIONS 3;

997755.com澳门葡京 3

一、常规KEY

一.创建分区

CREATE TABLE tb_key (
    id INT ,
    var CHAR(32) 
)
PARTITION BY KEY(var)
PARTITIONS 10;

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tb_key';

INSERT INTO tb_key() VALUES(1,'星期一'),(2,'1998-10-19'),(3,'new'),(4,'非常好'),(5,'5');

997755.com澳门葡京 4

 

3、分区管制

分区简单介绍。key分区管理和hash分区管理是壹致的,只可以删除和扩大分区,那里不再做详细介绍。

1.删除2个分区

ALTER TABLE tb_key COALESCE PARTITION 2;

二.扩大多少个分区

ALTER TABLE tb_key add PARTITION partitions 3;

二、LINEAR KEY

同样key分区也设有线性KEY分区,概念和线性HASH分区同样。

1.开立分区

CREATE TABLE tb_keyline (
    id INT NOT NULL,
    var CHAR(5)
)
PARTITION BY LINEAR KEY (var)
PARTITIONS 3;

997755.com澳门葡京 5

= 水平分区(根据列属性按行分)=
举个简易例子:二个涵盖10年发票记录的表能够被分区为13个差异的分区,每一种分区包蕴的是里面一年的记录。

4、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

瞩目:使用remove移除分区是单纯移除分区的定义,并不会去除数据和drop
PARTITION不均等,后者会连同数据一同删除

 

 

**分区为数众多文章: **

RANGE分区:

LIST分区:

COLUMN分区:

HASH分区:

子分区:

钦定各分区路线:

分区建索引:

分区介绍总结:

叁、分区管制

key分区管理和hash分区管理是平等的,只可以删除和扩展分区,这里不再做详细介绍。

1.删除2个分区

ALTER TABLE tb_key COALESCE PARTITION 2;

二.日增四个分区

ALTER TABLE tb_key add PARTITION partitions 3;

 水平分区的几种方式:

总结

 KEY分区和HASH分区类似,在拍卖大量多少记录时能管用的粗放数据火热。

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

4、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

留意:使用remove移除分区是单独移除分区的定义,并不会去除数据和drop
PARTITION不壹致,后者会连同数据一起删除

 

 

参考: 

RANGE分区:

LIST分区:

COLUMN分区:

HASH分区:

子分区:

点名各分区路线:

分区建索引:

分区介绍总计:

* Range(范围) – 
基于属于三个加以老是区间的列值,把多行分配给分区。例如DBA能够将七个表通过大年份划分成多少个分区,80年份(一九七八’s)的数额,90时代(一九九零’s)的多少以及任何在2000年(包含三千年)后的多寡。

总结

 KEY分区和HASH分区类似,在拍卖多量数码记录时能管用的分散数据火热。

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

KEY分区,mysqlkey分区 介绍
KEY分区和HASH分区相似,然则KEY分区帮助除text和BLOB之外的保有数据类型的分区,而HASH分区只辅助数字分区,…

RANGE分区根据3个加以的总是区间范围,早期版本RANGE重若是根据整数的分区。在5.7版本中DATE、DATETIME列也足以行使RANGE分区,同时在伍.伍以上的本子提供了依照非整形的RANGE
COLUMN分区。RANGE分区必须的延续的且不可能重叠。使用”VALUES LESS THAN
()

来定义分区距离,非整形的界定值需求运用单引号,并且能够运用MAXVALUE作为分区的最高值。

List(预订义列表) – 
类似于按RANGE分区,分裂在于LIST分区是依据列值相配二个离散值集聚中的有个别值来开始展览精选。

* Hash(哈希) – 
基于用户定义的表明式的重临值来开始展览精选的分区,该表明式使用就要插入到表中的那么些行的列值举行计算。那些函数能够包蕴MySQL
中央银立见成效的、发生非负整数值的其余表明式。例如DBA可以建立三个对表主键实行分区的表。

* Key(键值) – 上面Hash形式的1种延伸,那里的Hash
Key是MySQL自己的哈希函数产生的。

* COLUMNS – 
MYSQL5.5起来辅助COLUMNS分区,可视为RANGE和LIST分区的3个更上1层楼。COLUMNS分区能够向来利用非整型的数量开始展览分区,分区依据项目直接相比较而拿到,不须要转接为整型。COLUMNS分区援救以下数据类型:

  • 负有的整型类型,如INT,TINYINT,SMALLINT,BIGINT。对FLOAT和DEC奥迪Q5IDE兰德TiggoL不帮忙
  • 日期类型,DATE,DATETIME。其他日期类型不帮忙。
  • 字符串类型,如CHA凯雷德,VALacrosseCHABMWX伍,BINAKoleosY,VARBINALX570Y。不援救BLOB和TEXT。

* Composite(复合形式)
很暧昧吧,哈哈,其实是上述情势的结合使用而已,就不解释了。举例:在初叶化已经拓展了Range范围分区的表上,我们得以对里面3个分区再张开hash哈希分区。

 

 

= 垂直分区(按列分)=
举个简易例子:多少个带有了大text和BLOB列的表,这么些text和BLOB列又不平时被访问,那时候将在把那个不平时选取的text和BLOB了分割到另两个分区,在担保它们数据相关性的还要还是能增进访问速度。MySQL近来不帮衬垂直分区。

 

Range 分区

成立分区

CREATE DATABASE part;
CREATE TABLE e (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30)
)
    PARTITION BY RANGE (id) (
        PARTITION p0 VALUES LESS THAN (50),
        PARTITION p1 VALUES LESS THAN (100),
        PARTITION p2 VALUES LESS THAN (150),
        PARTITION p3 VALUES LESS THAN (MAXVALUE)
);

INSERT INTO e VALUES 
    (1669, "Jim", "Smith"),
    (337, "Mary", "Jones"),
    (16, "Frank", "White"),
    (2005, "Linda", "Black");

翻开分区和分区的行数:

root@localhost 20:15:26[part]> SELECT PARTITION_NAME, TABLE_ROWS 
    ->     FROM INFORMATION_SCHEMA.PARTITIONS 
    ->     WHERE TABLE_NAME = 'e';
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p0             |          1 |
| p1             |          0 |
| p2             |          0 |
| p3             |          3 |
+----------------+------------+

> SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'part' AND TABLE_NAME LIKE 'e'; 

删去有个别分区,不仅分区结构会被剔除,分区里的数目也会被去除:

ALTER TABLE e DROP PARTITION p0;

扩丰硕区:

> alter table e add partition (partition p4 values less than (5600)); 
ERROR 1481 (HY000): MAXVALUE can only be used in last partition definition

证实有MAXVALUE值后,直接加分区是不可行的,供给选择 reorginize
partition() 重新组织分区。且 RANGE
分区在加分区的时候,只好从最大值前面加,而最大值前边不可能加上。

也能够另行组织分区,重组分区的做法是,把本来的分区结构删除,创立新的分区结构,但新的分区结构要求求能容纳原分区的数额,否则会有报错:E景逸SUVRO君越152陆 (HY000): Table has no partition for value 123四

# 把原range分区,重组为list分区,此过程不会丢失数据
> alter table e partition by list(id)(PARTITION a VALUES IN (1,5,6,1669,2005),PARTITION b VALUES IN (1234,2,7,8,337,9898));
Query OK, 7 rows affected (0.12 sec)
Records: 7  Duplicates: 0  Warnings: 0

 

 如果在贰个尚无分区定义的表中扩大分区,直接动用 add 增加会报错:

> alter table e add partition (partition p0 values less than(50),PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LESS THAN (150)); 
ERROR 1505 (HY000): Partition management on a not partitioned table is not possible

能够应用 partition by 新建:

> alter table e partition by range(id)(PARTITION p1 VALUES LESS THAN (100),PARTITION p2 VALUES LESS THAN (1256320));
Query OK, 7 rows affected (0.08 sec)
Records: 7  Duplicates: 0  Warnings: 0

也得以新建三个富有分区的表,结构同样,然后用insert into 分区表 select *
from 原始表;

 

LIST 分区

创建 list 分区:

CREATE TABLE tblist (
    id INT NOT NULL,
    store_id INT
)
PARTITION BY LIST(store_id) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8),
    PARTITION c VALUES IN (3,9,10),
    PARTITION d VALUES IN (4,11,12)
);

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME  FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblist'; 

日增分区:

ALTER TABLE tblist ADD PARTITION (PARTITION e VALUES IN (20));
# 注意:不能增加包含现有任意值的分区。

合并分区:

ALTER TABLE tblist REORGANIZE PARTITION  a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8,13));
# 将分区a,b合并为分区m
# 可以新增值,例如这里增加了 13 值
# 注意:同 RANGE 分区一样,只能合并相邻的几个分区,不能跨分区合并。例如不能合并a,c两个分区,只能通过合并a,b,c

拆分分区:

ALTER TABLE tblist REORGANIZE PARTITION  m,c INTO 
(PARTITION m VALUES IN (1,5,6,3,9,10),
PARTITION n VALUES IN (2,7,8));

注意

壹.
在五.柒.12本子中测试发现,合并和拆分分区重新定义的枚举值能够不是原来的值,假诺原先的枚举值包涵了数量而新合并或拆分的分区枚举值又不不分包原来的枚举值会形成数据丢失。即使不清楚为何mysql不会禁止该行为,可是人为的渴求无论是合并恐怕拆分分区枚举值保持不改变,可能只可以扩展不可能减小,那样能保险数据不丢掉。

二.
并和拆分后的分区由于是周围的分区实行联合和拆分会依据原本的分区的值新的分区也会在原本的分区的逐条地方。

  1. 分区的语法基本是如出一辙的,只是定义分区范围略有分裂。如 RANGE 分区选拔:
    VALUES LESS THAN (value),而 LIST 分区采取: VALUES IN (list) 。

删除分区:

ALTER TABLE tblist DROP PARTITION e;
# 注意:删除分区同时会将分区中的数据删除,同时枚举的list值也被删除,后面无法往表中插入该值的数据。

  

HASH 分区

据他们说给定的分区个数,将数据分配到分裂的分区,HASH分区只可以针对整数举办HASH,对于非整形的字段只可以通过表明式将其调换来整数。表明式能够是mysql中随机有效的函数大概表达式,对于非整形的HASH往表插入数据的长河中会多一步表明式的盘算操作,所以不提议利用复杂的表明式这样会潜移默化属性。

MYSQL协理三种HASH分区,常规HASH(HASH)和线性HASH(LINEA哈弗 HASH) 。

1. 常规HASH

常规hash是基于分区个数的取模(%)运算。依据余数插入到钦定的分区。

CREATE TABLE tbhash (
    id INT NOT NULL,
    store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4;

ALTER TABLE tbhash ADD INDEX ix_store_id(store_id);

INSERT INTO tbhash() VALUES(1,100),(1,101),(2,102),(3,103),(4,104);

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tbhash';

岁月字段类型分区:

 

CREATE TABLE employees (
    id INT NOT NULL,
    hired DATE NOT NULL DEFAULT '1970-01-01',
)
PARTITION BY HASH( YEAR(hired) )
PARTITIONS 4;

常规hash的分区十分的省心,通过取模的办法能够让多少十一分平均的分布每一个分区,可是出于分区在创立表的时候曾经稳固了。假如新扩张只怕收缩分区的多寡迁移相比较大。

2. 线性HASH(LINEAR HASH)

LINEAKuga HASH和HASH的唯壹不相同正是PARTITION BY LINEA福特Explorer HASH。

CREATE TABLE tblinhash (
    id INT NOT NULL,
    hired DATE NOT NULL DEFAULT '1970-01-01'
)
PARTITION BY LINEAR HASH( YEAR(hired) )
PARTITIONS 6;

线性HASH的乘除原理参考:

三. 分区管制

减去3个分区:

ALTER TABLE tblinhash COALESCE PARTITION 3;

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblinhash';

只顾:减去多少个分区后,数据依据现成的分区举行了重新的遍布,以’200三-0四-14’为例:POWE逍客(二,
CEILING( LOG(二,三)
))=四,200三&(四-一)=三,三>=三,叁&(CEILING(3/贰)-一)=1,所以未来的’2003-04-1四’这条记下由原本的p三产生了p壹。

增加4个分区:

ALTER TABLE tblinhash add PARTITION partitions 4;

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblinhash';

当在三个分区的基础上扩张6个分区后,‘200三-04-1四’由原来的p1形成了p三,而另一条记下由原本的p二产生了p陆。

 

KEY分区

KEY分区和HASH分区相似,可是KEY分区扶助除text和BLOB之外的具有数据类型的分区,而HASH分区只支持数字分区,KEY分区不容许使用用户自定义的表明式举行分区,KEY分区使用系统提供的HASH函数进行分区。当表中存在主键只怕唯壹键时,倘诺创设key分区时未尝点名字段系统暗中同意会首推主键列作为分区字列,纵然不存在主键列会选取非空唯1键列作为分区列,注意唯一列作为分区列唯壹列无法为null。

始建健康 KEY 分区

CREATE TABLE tb_key (
    id INT ,
    var CHAR(32) 
)
PARTITION BY KEY(var)
PARTITIONS 10;

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tb_key';

创建 LINEAR KEY 分区

同等key分区也设无线性KEY分区,概念和线性HASH分区一样。

CREATE TABLE tb_keyline (
    id INT NOT NULL,
    var CHAR(5)
)
PARTITION BY LINEAR KEY (var)
PARTITIONS 3;

 

COLUMN 分区 

COLUMN分区是伍.伍始发引进的分区作用,唯有RANGE COLUMN和LIST
COLUMN这三种分区;补助整形、日期、字符串;同RANGE和LIST的分区情势尤其的貌似。

COLUMNS和RANGE和LIST分区的区分

一.
针对日期字段的分区就不须求再利用函数进行转换了,例如针对date字段进行分区不必要再采纳YEA本田UR-V()表明式举行更改。

  1. COLUMN分区帮忙八个字段作为分区键不过不帮助表明式作为分区键。

COLUMNS援助的品种

整形帮助:tinyint,smallint,mediumint,int,bigint;不帮忙decimal和float

岁月档次帮衬:date,datetime

字符类型帮助:char,varchar,binary,varbinary;不帮忙text,blob

一、RANGE COLUMNS分区

1. 日期字段分区

CREATE TABLE members (
    id INT,
    joined DATE NOT NULL
)
PARTITION BY RANGE COLUMNS(joined) (
    PARTITION a VALUES LESS THAN ('1960-01-01'),
    PARTITION b VALUES LESS THAN ('1970-01-01'),
    PARTITION c VALUES LESS THAN ('1980-01-01'),
    PARTITION d VALUES LESS THAN ('1990-01-01'),
    PARTITION e VALUES LESS THAN MAXVALUE
);

insert into members(id,joined) values(1,'1950-01-01'),(1,'1960-01-01'),(1,'1980-01-01'),(1,'1990-01-01');

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='members';

二. 多字段组合分区

CREATE TABLE rcx (
    a INT,
    b INT
    )
PARTITION BY RANGE COLUMNS(a,b) (
     PARTITION p0 VALUES LESS THAN (5,10),
     PARTITION p1 VALUES LESS THAN (10,20),
     PARTITION p2 VALUES LESS THAN (15,30),
     PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE)
);

注意:

1)多字段的分区键相比是基于数组的可比。它先用插入的多寡的首先个字段值和分区的率先个值实行相比较,假如插入的第一个值小于分区的第一个值那么就不须求相比第3个值就属于该分区;如若第一个值等于分区的率先个值,早先相比第三个值同样借使第四个值紧跟于分区的第三个值那么就属于该分区。

二)RANGE
COLUMN的多列分区第叁列的分区值一定是逐1拉长的,无法出现交叉值,第一列的值随便,例如以下分区就会报错。

二、LIST COLUMNS分区

一. 非整形字段分区

CREATE TABLE listvar (
    id INT NOT NULL,
    hired DATETIME NOT NULL
)
PARTITION BY LIST COLUMNS(hired) 
(
    PARTITION a VALUES IN ('1990-01-01 10:00:00','1991-01-01 10:00:00'),
    PARTITION b VALUES IN ('1992-01-01 10:00:00'),
    PARTITION c VALUES IN ('1993-01-01 10:00:00'),
    PARTITION d VALUES IN ('1994-01-01 10:00:00')
);

ALTER TABLE listvar ADD INDEX ix_hired(hired);

INSERT INTO listvar() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(1,'1992-01-01 10:00:00'),(1,'1993-01-01 10:00:00');

LIST
COLUMNS分区对分整形字段进展分区就无需选拔函数对字段处理成整形,所以对非整形字段举行分区提议采取COLUMNS分区。

二. 多字段分区

CREATE TABLE listvardou (
    id INT NOT NULL,
    hired DATETIME NOT NULL
)
PARTITION BY LIST COLUMNS(id,hired) 
(
    PARTITION a VALUES IN ( (1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00') ),
    PARTITION b VALUES IN ( (2,'1992-01-01 10:00:00') ),
    PARTITION c VALUES IN ( (3,'1993-01-01 10:00:00') ),
    PARTITION d VALUES IN ( (4,'1994-01-01 10:00:00') )
);

ALTER TABLE listvardou ADD INDEX ix_hired(hired);

INSERT INTO listvardou() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(2,'1992-01-01 10:00:00'),(3,'1993-01-01 10:00:00');

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='listvardou';

 

移除表分区

ALTER TABLE tablename REMOVE PARTITIONING ;

留意:使用remove移除分区是单独移除分区的定义,并不会删除数据和 drop
PARTITION 不1致,后者会连同数据一齐删除。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website