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

mysql 分区表

2015-07-23 10:20 776 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: