mysql分区

Posted 记录点点滴滴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql分区相关的知识,希望对你有一定的参考价值。

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分区的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

MySQL表分区

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

mysql分区表

使用 json rereiver php mysql 在片段中填充列表视图

MySQL 表数据分区,每10000条数据自动分区