码迷,mamicode.com
首页 > 数据库 > 详细

mysql分区

时间:2018-08-14 00:58:39      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:sql   部分   存储   --   键值   alter   list分区   管理   技术   

1. 什么是表分区?

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。

mysql分区表包含三种  hash分区 ,范围分区,列表分区。

 查看当前数据是否支持分区功能命令 show plugins; 如果看到以下结果说明支持

技术分享图片

 

2 hash分区

  1 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。

  2 键值必须是一个int整形值,或者经过函数可以转为int

  下面演示hash创建hash分区表

1 CREATE TABLE `student` (
2 `id`  int NOT NULL  ,
3 `name`  varchar(255) NULL ,
4 `age`  int NULL 
5 )PARTITION BY HASH(age)
6 PARTITIONS 4;

 3 RANGE 分区 

  基于属于一个给定连续区间的列值,把多行分配给分区。

 

  这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符来进行定义。以下是实例。

CREATE TABLE people (
    id INT NOT NULL,
    name VARCHAR(30),
    age INT NOT NULL
)
partition BY RANGE (age) (
    partition p0 VALUES LESS THAN (10000), -- age 在0-10000的数据由P0分区存储
    partition p1 VALUES LESS THAN (20000), -- age 在10000-20000的数据由P1分区存储
    partition p2 VALUES LESS THAN (30000), -- age 在20000-30000的数据由P2分区存储
    partition p3 VALUES LESS THAN (40000), -- age 在30000-40000的数据由P3分区存储
    partition p4 VALUES LESS THAN MAXVALUE -- age 在40000-int的最大值的数据由P4分区存储
);

  RANGE 分区的适用场景,

  分区键是日期或者时间的的数据 如日志表 下面创建日志分区表

CREATE TABLE user_log (
    id INT NOT NULL,
    user_id INT NOT NULL,
    last_login_time DATETIME
)
partition BY RANGE (YEAR(last_login_time)) (
    partition p0 VALUES LESS THAN (2015),
    partition p1 VALUES LESS THAN (2016),
    partition p2 VALUES LESS THAN (2017),
    partition p4 VALUES LESS THAN MAXVALUE 
);

插入数据 

INSERT INTO `test`.`user_log` (`id`, `user_id`, `last_login_time`) VALUES (‘1‘, ‘1‘, ‘2018-08-14 23:52:44‘);

查询数据 可以看见 p4区有一条数据

技术分享图片

 

 

LIST分区

  类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

 

CREATE TABLE cat (
    id INT NOT NULL,
    name VARCHAR(30),
    age INT
)
PARTITION BY LIST(age)(
    PARTITION p0 VALUES IN (1,3,5,7), -- 奇数存这个分区
    PARTITION p1 VALUES IN (2,4,6,8)  -- 偶数存这个分区
);

 

 

  手动的加分区 删除分区信息

  ALTER TABLE user_log ADD PARTITION (PARTITION  p5 VALUES LESS THAN (2014));

  ALTER TABLE user_log DROP PARTITION p0

使用分区表需注意的事项 ,

1 查询时 最好在where条件 设置分区限制 避免跨区查询

2 具有主键或者唯一索引的表,主键或者唯一键必须是分区键的一部分 

  

 

mysql分区

标签:sql   部分   存储   --   键值   alter   list分区   管理   技术   

原文地址:https://www.cnblogs.com/tjqBlog/p/9471855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!