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

Mysql Partition分区(理论)

2015-07-16 17:12 681 查看

Partition 分区

MySql 5.6 手册:http://dev.mysql.com/doc/refman/5.6/en/partitioning.html

我理解的分区

举个例子,操作系统中的分区,是将硬盘根据大小进行逻辑分区,就是我们看到的C、D、E、F盘,逻辑分区还是在同一个操作系统中。数据库产品的Partition分区也是一样的道理,将数据进行逻辑分区,对数据划分界限。

分区类型

MySql 支持Range,List,Hash,Key。最长用的是Range。注意不同的版本对分区类型的支持有些不同!

Range:范围

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 NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN (21)
);

LIST:列表

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

Key:键

CREATE TABLE k1 (
id INT NOT NULL,
name VARCHAR(20),
UNIQUE KEY (id)
)
PARTITION BY KEY()
PARTITIONS 2;

HASH:哈希

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 HASH( YEAR(hired) )
PARTITIONS 4;


例子

数据:新闻表,2010开始记录,假设10年到15年每年的数据为200W,总数1000W;
条件:查询15年7月所有的新闻数据;
未分区:需要把表遍历,1000W条数据,查询性能就不用说了;
分区:按照年份分区,当要查询15年数据,只会遍历15年的数据200W条;

参考

深入了解MySQL 5.5分区功能增强

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: