mysql之数据分区
一:概述 通过把表分成多几区间,每个区间存储符合特定表达式的数据(即在我们创建分区表时指定每个分区存储的条件例如:PARTITION p0 VALUES LESS THAN (100) 即p0区间存储小于100的数据)。
二:分区类型
即根据每个区间存储值的表达式不同,可分为如下几个类型,一般都是对数字类型或时间类型的数据进行分区。
2.1 RANGE分区 :即通过表达式 PARTITION p0 VALUES LESS THAN (100) 。即 less小于指定的值存储区间。
2.2 LIST 分区 :即通过表达式 PARTITION pNorth VALUES IN (3,5,6,9,17) 。即值在in括号里面的值存储区间。
2.3 HASH 分区 :即通过特定算法(hash)把指定的值放入不同区间。PARTITION BY HASH(id) PARTITIONS 4。
2.4 KEY 分区: 和hash分区类似,但指定的列值必须是唯一值(即主键或 UNIQUE KEY),PARTITION BY KEY() PARTITIONS 2;
2.5 COLUMNS 分区:
三:分区查询
语法:
SELECT
select_expr [, select_expr ...]
FROM table_references
[PARTITION partition_list] //指定分局
eg:select * from rc1 PARTITION(p0) ; //在标的引用后面加上PARTITION(p,...)函数,参数为表的分区名
备注:如果我们查询没有添加分区条件,默认是查询所有分区
四:RANGE分区
CREATE TABLE `tb_range` (
-> `id` int(11) NOT NULL,
-> `fname` varchar(30) DEFAULT NULL,
-> `lname` varchar(30) DEFAULT NULL
-> )
-> PARTITION BY RANGE (id)
-> (PARTITION p0 VALUES LESS THAN (6),
-> PARTITION p1 VALUES LESS THAN (11),
-> PARTITION p2 VALUES LESS THAN MAXVALUE ) ;
Query OK, 0 rows affected (0.64 sec) mysql> insert into tb_range(id,fname,lname)values(1,'a1','b1'),(6,'a6','b6'),(10,'a10','b10'),(20,'a20','b20');
Query OK, 4 rows affected (0.02 sec)
Records: 4 Duplicates: 0 Warnings: 0
查询:
mysql> select * from tb_range partition(p0); //查询p0区的数据
+----+-------+-------+
| id | fname | lname |
+----+-------+-------+
| 1 | a1 | b1 |
+----+-------+-------+
1 row in set (0.00 sec) mysql> select * from tb_range partition(p2);//查询p2区的数据
+----+-------+-------+
| id | fname | lname |
+----+-------+-------+
| 20 | a20 | b20 |
+----+-------+-------+
1 row in set (0.00 sec) mysql> select * from tb_range partition(p1);//查询p1区的数据
+----+-------+-------+
| id | fname | lname |
+----+-------+-------+
| 6 | a6 | b6 |
| 10 | a10 | b10 |
+----+-------+-------+
2 rows in set (0.00 sec)
五:LIST 分区
mysql> CREATE TABLE `tb_list` (
-> `id` int(11) NOT NULL,
-> `fname` varchar(30) DEFAULT NULL,
-> `lname` varchar(30) DEFAULT NULL,
-> `class_id` int(11) NOT NULL
-> )
-> PARTITION BY LIST(class_id) (
-> PARTITION pNorth VALUES IN (1,3),
-> PARTITION pEast VALUES IN (2,4)
-> );
Query OK, 0 rows affected (0.47 sec) mysql> insert into tb_list(id,fname,lname,class_id)values(1,'a1','b1',1),(6,'a6','b6',2),(10,'a10','b10',3),(20,'a20','b20',4);
Query OK, 4 rows affected (0.02 sec)
查询:
mysql> select * from tb_list partition(pEast);
+----+-------+-------+----------+
| id | fname | lname | class_id |
+----+-------+-------+----------+
| 6 | a6 | b6 | 2 |
| 20 | a20 | b20 | 4 |
+----+-------+-------+----------+
2 rows in set (0.00 sec) mysql> select * from tb_list partition(pNorth);
+----+-------+-------+----------+
| id | fname | lname | class_id |
+----+-------+-------+----------+
| 1 | a1 | b1 | 1 |
| 10 | a10 | b10 | 3 |
+----+-------+-------+----------+
2 rows in set (0.00 sec)
备注:list方式分区in()参数可以无需
如果插入不存在的分区,数据库会报错
六:HASH 分区
6.1hash散列算法
mysql> CREATE TABLE tb_hash (
-> id INT NOT NULL,
-> fname VARCHAR(30),
-> lname VARCHAR(30)
-> )
-> PARTITION BY HASH(id)
-> PARTITIONS 3;
Query OK, 0 rows affected (0.56 sec) mysql> insert into tb_hash(id,fname,lname)values(1,'a1','b1'),(6,'a6','b6'),(10,'a10','b10'),(20,'a20','b20');
Query OK, 4 rows affected (0.03 sec)
Records: 4 Duplicates: 0 Warnings: 0
查询:默认分区为p0,p1....
mysql> select * from tb_hash partition(p0);
+----+-------+-------+
| id | fname | lname |
+----+-------+-------+
| 6 | a6 | b6 |
+----+-------+-------+
1 row in set (0.00 sec) mysql> select * from tb_hash partition(p1);
+----+-------+-------+
| id | fname | lname |
+----+-------+-------+
| 1 | a1 | b1 |
| 10 | a10 | b10 |
+----+-------+-------+
2 rows in set (0.00 sec) mysql> select * from tb_hash partition(p2);
+----+-------+-------+
| id | fname | lname |
+----+-------+-------+
| 20 | a20 | b20 |
+----+-------+-------+
1 row in set (0.01 sec)
mysql> select * from tb_hash partition(p3);
ERROR 1735 (HY000): Unknown partition 'p3' in table 'tb_hash'
6.2 hash线性算法
mysql> CREATE TABLE tb_hash_linear (
-> id INT NOT NULL,
-> fname VARCHAR(30),
-> lname VARCHAR(30)
-> )
-> PARTITION BY LINEAR HASH(id)
-> PARTITIONS 3;
Query OK, 0 rows affected (0.58 sec)
七:KEY 分区
mysql> CREATE TABLE tb_key (
-> id INT NOT NULL PRIMARY KEY,
-> name VARCHAR(20)
-> )
-> PARTITION BY KEY()
-> PARTITIONS 2;
Query OK, 0 rows affected (0.44 sec)
注意:我们数据库目录存放着我们所有数据库的信息,包括数据库中表的信息和表中数据。其中每个数据库会在该目录下创建一个以数据库名命名文件夹,该文件夹下主要包含.frm和.idb结尾的文件,其中.idb(一个表对应一个)文件存放着每个表的数据。如果我们的表是分区表则一个表对用多个.idb文件。分析下图箭头

有图可知:
数据库目录 : /var/lib/mysql
我查看的数据库为:test3
普通表一个.frm和一个.idb 而分区表一个.frm和多个.idb文件
mysql之数据分区的更多相关文章
- 删除mysql数据库中表分区数据
删除mysql数据库中表分区数据 zabbix 几个大表创建了分区,由于磁盘空间告警,特将3月前的分区给予删除. 1.查看表的数据占用磁盘空间情况 2.登录mysql中,查看表的分区情况. 3.删除表 ...
- [转] MySQL 查询表数据大小的总结
一:关于mysql表数据大小 我们知道mysql存储数据文件一般使用表空间存储 当mysql使用innodb存储引擎的时候,mysql使用表存储数据分为共享表空间和独享表空间两种方式 ·共享表空间:I ...
- MySQL的表分区详解
这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...
- MySQL的表分区(转载)
MySQL的表分区(转载) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...
- zabbix使用mysql数据库 对表分区
zabbix删除历史数据 mysql 表自动分区.删除 ----2016年终总结 二 zabbix清理历史数据是个比较蛋疼的问题,尤其在监控数据较多时,一方面无法彻底释放历史数据空间,一方面数据库删除 ...
- MySQL 横向表分区之RANGE分区小结
MySQL 横向表分区之RANGE分区小结 by:授客 QQ:1033553122 目录 简介 1 RANGE分区 1 创建分区表 1 查看表分区 2 新增表分区 2 新增数据 3 分区表查询 3 删 ...
- 使用sqoop从mysql导入数据到hive
目录 前言 一.使用的导入命令 二.遇到的问题及解决 1. 用文本字段进行分区的问题 2. Hadoop历史服务器Hadoop JobHistory没开启的问题 3. 连接元数据存储数据库报错 4 ...
- mysql 超大数据/表管理技巧
如果你对长篇大论没有兴趣,也可以直接看看结果,或许你对结果感兴趣.在实际应用中经过存储.优化可以做到在超过9千万数据中的查询响应速度控制在1到20毫秒.看上去是个不错的成绩,不过优化这条路没有终点,当 ...
- MySql采用range分区可提升查询效率
简介: RANGE分区基于一个给定的连续区间范围,早期版本RANGE主要是基于整数的分区.在5.7版本中DATE.DATETIME列也可以使用RANGE分区,同时在5.5以上的版本提供了基于非整形的R ...
随机推荐
- 记账本,C,Github,结果
- Linux 下监控用户最大进程数参数(nproc)是否到达上限的步骤:
https://www.cnblogs.com/autopenguin/p/6184886.html 1.查看各系统用户的进程(LWP)数: 注意:默认情况下采用 ps 命令并不能显示出所有的进程.因 ...
- flash/flex builder在IE中stage.stageWidth始终为0的解决办法
这应该是IE的bug,解决办法: 原作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com stage.align=StageAlign.TOP_LEFT; stage.scal ...
- EasyChat简易聊天室实现
我是个技术新人,刚刚毕业,平时遇到问题都是在网上查找资料解决,而很多经验都来自园子,于是我也想有自己的园子,把自己的编程快乐与大家分享. 在学校学习的期间,老师带我们做winform,那时候我什么都不 ...
- vue获取后台图片验证码,并点击刷新验证码
<--url为需要访问的接口地址--> <span style="display: inline-block;width: 130px;height: 53px;borde ...
- 正则RegExp的懒惰性和贪婪性; 分组捕获;
1.正则的懒惰性??? 每次在它的方法exec中捕获的时候,只捕获第一次匹配的内容,而不往下捕获,我们把这种情况称为正则的懒惰性 且每一次捕获的位置都是从索引0开始 正则的实例对象上有一个lastin ...
- dfs | Security Badges
Description You are in charge of the security for a large building, with n rooms and m doors between ...
- 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结
<面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...
- boost asio 学习(八) 网络基础 二进制写发送和接收
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=9 8. Net ...
- 设计模式之桥接模式 c++11
参考http://blog.csdn.net/calmreason/article/details/50909321 桥接模式 实现与抽象之间由指针关联 调用sample类 实际是调用sample类保 ...