mysql 分区表

mysql 提供分区表的功能,可以将大表进行分拆,分拆后可以极大的提升查询能力。

备注:分区表的分区也可以部署到不同的物理磁盘。

下面是一个典型的RANGE分区例子:

1、创建数据库如下:

DROP TABLE IF EXISTS t_demo_test4;
CREATE TABLE t_demo_test4(
    tid int(20) NOT NULL AUTO_INCREMENT,
    day datetime NOT NULL,
    title varchar(50),
    content varchar(200),
    PRIMARY KEY(tid, day)    
)PARTITION BY RANGE COLUMNS (day)(
    PARTITION P_3 VALUES LESS THAN ('2015-03-01'),
    PARTITION P_6 VALUES LESS THAN ('2015-06-01'),
    PARTITION P_9 VALUES LESS THAN ('2015-09-01'),
    PARTITION P_12 VALUES LESS THAN ('2015-12-31')
);

2、插入数据:

insert into t_demo_test4(day, title, content) 
values('2015-04-05 22:10:30','title1','content sinny write test')
,('2015-05-05 22:10:30','title1','一种内容1')
,('2015-06-06 22:10:30','title1','一种内容2')
,('2015-07-07 22:10:30','title1','一种内容3')
,('2015-08-08 22:10:30','title1','一种内容4');

3、查询数据:

SELECT * FROM t_demo_test4 WHERE day < '2015-5-30';

通过explain查看:

可以看到此时,rows = 4,改搜索并未遍历全部数据。

//-------------------------------------------------------------------------------------------------------------------------------

MYSQL还提供LIST、HASH、KEY三种分区方式,如下:

DROP TABLE IF EXISTS t_demo_test5;
CREATE TABLE t_demo_test5(
    tid int(20) NOT NULL AUTO_INCREMENT,
    day datetime NOT NULL,
    type varchar(50),
    content varchar(200),
    PRIMARY KEY(tid,type)    
)PARTITION BY LIST COLUMNS(type)(
    PARTITION P_1 VALUES  IN ('report','note'),
    PARTITION P_2 VALUES  IN ('default')
);
DROP TABLE IF EXISTS t_demo_test5;
CREATE TABLE t_demo_test5(
    tid int(20) NOT NULL AUTO_INCREMENT,
    day datetime NOT NULL,
    type varchar(50),
    content varchar(200),
    PRIMARY KEY(tid)    
)PARTITION BY LINEAR HASH(tid)
PARTITIONS 4;
DROP TABLE IF EXISTS t_demo_test5;
CREATE TABLE t_demo_test5(
    tid int(20) NOT NULL AUTO_INCREMENT,
    day datetime NOT NULL,
    type varchar(50),
    content varchar(200),
    PRIMARY KEY(tid)    
)PARTITION BY LINEAR KEY(tid)
PARTITIONS 4;
原文地址:https://www.cnblogs.com/Fredric-2013/p/4669659.html