MySQL分区

一、分区优点

  1. 逻辑数据分割,存储在不同的位置
  2. 方便逻辑数据的删除,当不需要某逻辑数据,可以删除分区
  3. 优化查询,可以通过确定分区,更快定位数据存储位置
  4. 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量
  5. 分区后数据仍存储在同一张表,满足一张表上的约束条件

二、分区限制

  1. 只能对整形数据进行分区
  2. 如果表含有主键或者唯一索引,则表的分区必须包含主键或者唯一索引
  3. 分区的最大数为1024
  4. 分区不支持全文索引
  5. 分区不支持外键

三、什么时候使用分区

  1. 海量数据表
  2. 历史表快速的查询,可以采用ARCHIVE+PARTITION的方式。
  3. 数据表索引大于服务器有效内存
  4. 对于大表,特别是索引远远大于服务器有效内存时,可以不用索引,此时分区效率会更有效。

四、分区的类型

  1. Range分区
  2. List分区
  3. Hash分区
  4. 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;

你可能感兴趣的:(MySQL分区)