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出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段