MySQL 分区表 – 简单入门-数据库论坛-技术分享-千百度社区

MySQL 分区表 – 简单入门

MySQL 分区表 – 简单入门

1. 分区表的概念


2. 分区规则

  • RANGE 分区

指定某一连续区间,把对应的行数据分配给分区。

例子:

CREATE TABLE t22 (uid INT NOT NULL,login_name VARCHAR(45) NOT NULL,age VARCHAR(45) NULL, PRIMARY KEY (uid))
  PARTITION BY RANGE ( uid ) (
    PARTITION p0 VALUES LESS THAN (3),
    PARTITION p1 VALUES LESS THAN (5),
    PARTITION p3 VALUES LESS THAN MAXVALUE); # 如果不想后续无法继续添加,可以不写 MAXVALUE 这行

在没有设置MAXVALUE这行的情况下,可以使用下面的语句进行修改

alter table t22 add partition(partition p2 values less than (5));
  • LIST 分区

类似RANGE分区,区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合。

例子:

CREATE TABLE t23 (sku_id INT NOT NULL,sku_type INT NOT NULL, PRIMARY KEY (uid))
  PARTITION BY LIST ( sku_type ) (
    PARTITION p0 VALUES IN (1,3),
    PARTITION p1 VALUES IN (2,4));
  • 复合分区

子分区(subpartitioning)也称为复合分区(composite partitioning),针对每个分区的进一步划分。

  • Hash分区
    计算Hash值,与分区数量取模得出位置。

例子:

CREATE TABLE employees (
  id INT NOT NULL,
  fname 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中还提供一个名为LINEAR HASH分区的方式,和Hash算法不同,其他的一样

  • Key分区
    类似Hash,只不过Hash是自己指定的,而key分区方式是Mysql服务器提供的。有主键用主键,没主键用唯一键,你也可以指定具体的字段。

例子:

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

3. 分区表的好处

  1. 突破文件系统限制,单表存储的数据更多;
  2. 对于无跨区查询的场景,性能更好。数据被分开,减少了查询时加载的数据量;
  3. 可以备份指定的分区数据。(文件形式直接备份,效率更快);
  4. 快速删除分区数据;

4. 注意事项

  1. MySQL分区中如果存在主键或唯一键,则分区列必须包含在其中
  2. 分区表达式里面不是所有的函数都支持
  3. 对于原生的RANGE分区,LIST分区,HASH分区,分区对象返回的只能是整数值

如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~

© 著作权归作者所有,转载或内容合作请联系作者

请登录后发表评论

    没有回复内容