MySQL COLUMNS分区【分分快三全天计划网站】

作者:分分快三全天计划网站

总结

RANGE COLUMNS和LIST COLUMNS分区其实是RANG和LIST分区的进级,所以可以直接采取COLUMN分区。注意COLUMNS分区不帮助timestamp字段类型。

 

 

备注:

    作者:pursuer.chen

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

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

《欢迎交流讨论》

介绍

COLUMN分区是5.5开头引进的分区作用,独有RANGE COLUMN和LIST COLUMN那二种分区;帮忙整形、日期、字符串;RANGE和LIST的分区格局非常的形似。

 

 

COLUMNS和RANGE和LIST分区的区分

1.针对日期字段的分区就不须要再利用函数举办转变了,举例针对date字段进行分区无需再采纳YEAavancier()表明式进行更动。

2.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
);

1.插入测量试验数据

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

2.询问分区数据布满

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';

分分快三全天计划网站 1

 当前有5个分区只插入了4条记下,个中C分区是绝非记录的,结果和实在一样。

3.解析执行计划

explain select id,joined from tb_partition.members where joined=YEAR(now());
explain select id,joined from tb_partition.members where joined='1963-01-01';

分分快三全天计划网站 2

率先条查询利用了函数导致查询未有走具体的分区而是扫描的具有的分区,而第二条查询试行语句查找具体的分区。

2.多少个字段组合分区

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)
);

只顾:多字段的分区键比较是依照数组的相比。它先用插入的数量的率先个字段值和分区的第八个值举办相比,借使插入的首先个值小于分区的首先个值那么就不要求相比第二个值就属于该分区;倘若第四个值等于分区的首先个值,领头比较第贰个值同样假诺第叁个值小于分区的第3个值那么就属于该分区。

分分快三全天计划网站 3

例如:

insert into rcx(a,b)values(1,20),(10,15),(10,30);

首先组值:(1,20);1<5所以无需再相比较20了,该记录属于p0分区。

其次组值:(10,15),10>5,10=10且15<20,所以该记录属于P1分区

其三组值:(10,30),10=10可是30>20,所以它不属于p1,它满意10<15于是它属于p2

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='rcx';

分分快三全天计划网站 4

 注意:RANGE COLUMN的多列分区第一列的分区值一定是各种拉长的,不可能出现交叉值,第二列的值随意,比方以下分区就能报错

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 (8,30),
     PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE)
);

是因为分区P2的第一列比P1的首先列要小,所以报错,后边的分区第一列的值应当要比前边分区值要大,第二列没规定。

二、LIST COLUMNS分区

1.非整形字段分区

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分区。

分分快三全天计划网站 5

EXPLAIN SELECT * FROM listvar WHERE hired='1990-01-01 10:00:00';

分分快三全天计划网站 6

 2.多字段分区

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';

分分快三全天计划网站 7

EXPLAIN SELECT * FROM listvardou WHERE id=1 and hired='1990-01-01 10:00:00';

分分快三全天计划网站 8

由于分区是构成字段,filtered独有四分之二,对于构成分区索引也最棒是建组合索引,其实只要能因此id字段刷选出多少,单独建id字段的目录也许有意义的,可是结合索引的功效是最佳的,其实和非分区键索引的定义差不离。

ALTER TABLE listvardou ADD INDEX ix_hired1(id,hired);

分分快三全天计划网站 9

备注:小说中的示例摘自mysql官方参谋手册

 

三、移除表的分区

ALTER TABLE tablename
REMOVE PARTITIONING ;

在乎:使用remove移除分区是独自移除分区的概念,并不会删除数据和drop PARTITION不等同,后面一个会连同数据一齐删除

 

**分区多元小说: **

RANGE分区:

LIST分区:

HASH分区:

KEY分区:

子分区:

钦定各分区路径:

分区建索引:

分区介绍总括:

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划