一、分区优点
- 逻辑数据分割,存储在不同的位置
- 方便逻辑数据的删除,当不需要某逻辑数据,可以删除分区
- 优化查询,可以通过确定分区,更快定位数据存储位置
- 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量
- 分区后数据仍存储在同一张表,满足一张表上的约束条件
二、分区限制
- 只能对整形数据进行分区
- 如果表含有主键或者唯一索引,则表的分区必须包含主键或者唯一索引
- 分区的最大数为1024
- 分区不支持全文索引
- 分区不支持外键
三、什么时候使用分区
- 海量数据表
- 历史表快速的查询,可以采用ARCHIVE+PARTITION的方式。
- 数据表索引大于服务器有效内存
- 对于大表,特别是索引远远大于服务器有效内存时,可以不用索引,此时分区效率会更有效。
四、分区的类型
- Range分区
- List分区
- Hash分区
- Key分区
五、分区示例
1.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 MAXVALUE
);
2.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)
);
3.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(store_id)
PARTITIONS 4;