一:概述  通过把表分成多几区间,每个区间存储符合特定表达式的数据(即在我们创建分区表时指定每个分区存储的条件例如: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之数据分区的更多相关文章

  1. 删除mysql数据库中表分区数据

    删除mysql数据库中表分区数据 zabbix 几个大表创建了分区,由于磁盘空间告警,特将3月前的分区给予删除. 1.查看表的数据占用磁盘空间情况 2.登录mysql中,查看表的分区情况. 3.删除表 ...

  2. [转] MySQL 查询表数据大小的总结

    一:关于mysql表数据大小 我们知道mysql存储数据文件一般使用表空间存储 当mysql使用innodb存储引擎的时候,mysql使用表存储数据分为共享表空间和独享表空间两种方式 ·共享表空间:I ...

  3. MySQL的表分区详解

    这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...

  4. MySQL的表分区(转载)

    MySQL的表分区(转载) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...

  5. zabbix使用mysql数据库 对表分区

    zabbix删除历史数据 mysql 表自动分区.删除 ----2016年终总结 二 zabbix清理历史数据是个比较蛋疼的问题,尤其在监控数据较多时,一方面无法彻底释放历史数据空间,一方面数据库删除 ...

  6. MySQL 横向表分区之RANGE分区小结

    MySQL 横向表分区之RANGE分区小结 by:授客 QQ:1033553122 目录 简介 1 RANGE分区 1 创建分区表 1 查看表分区 2 新增表分区 2 新增数据 3 分区表查询 3 删 ...

  7. 使用sqoop从mysql导入数据到hive

      目录 前言 一.使用的导入命令 二.遇到的问题及解决 1. 用文本字段进行分区的问题 2. Hadoop历史服务器Hadoop JobHistory没开启的问题 3. 连接元数据存储数据库报错 4 ...

  8. mysql 超大数据/表管理技巧

    如果你对长篇大论没有兴趣,也可以直接看看结果,或许你对结果感兴趣.在实际应用中经过存储.优化可以做到在超过9千万数据中的查询响应速度控制在1到20毫秒.看上去是个不错的成绩,不过优化这条路没有终点,当 ...

  9. MySql采用range分区可提升查询效率

    简介: RANGE分区基于一个给定的连续区间范围,早期版本RANGE主要是基于整数的分区.在5.7版本中DATE.DATETIME列也可以使用RANGE分区,同时在5.5以上的版本提供了基于非整形的R ...

随机推荐

  1. Shiro Remember me设置

    1. 在Spring的相关配置文件中加入如下Remember me管理器配置: <!-- rememberMe管理器 --> <bean id="rememberMeMan ...

  2. 坑之mysql 字符串与数字操作

    select "123"+1 = 124; select "1a23"+1 = 2; select "aa23"+1 = 1; select ...

  3. DJango 基础 (4)

    Django模板标签 知识点: 基本概念 常用标签 模板标签例子 模板继承与应用 注释标签 模板标签 标签在渲染的过程中提供任意的逻辑. 这个定义是刻意模糊的. 例如,一个标签可以输出内容,作为控制结 ...

  4. spring-boot的三种启动方式[z]

    https://blog.csdn.net/u011425751/article/details/79507386 有段时间没有写博客了,也在努力的从传统单机开发向分布式系统过度,所以再次做一些笔记, ...

  5. rsyslog和logrotate

    简介 rsyslog 是一个 syslogd 的多线程增强版. 现在Fedora和Ubuntu, rhel6默认的日志系统都是rsyslog了 rsyslog负责写入日志, logrotate负责备份 ...

  6. 线程属性 pthread_attr_t

    参考资料: https://blog.csdn.net/hudashi/article/details/7709413 Posix线程中的线程属性pthread_attr_t主要包括scope属性.d ...

  7. java多线程系列7 高级同步工具(1)信号量Semaphore

    Semaphore叫做信号量 可以控制某个资源可被同时访问的个数, acquire() 获取一个许可,得到许可才能执行后面的代码,如果没有就等待. release() 释放一个许可. 当信号量的只允许 ...

  8. Maven学习 一 概念介绍

    一 Maven是什么 Maven是一个Apache公司的开源项目,主要有两个作用:(1)是项目构建工具.(2)是用来管理java程序中jar包的依赖. 它包含了一个项目对象模型(Project Obj ...

  9. android开发环境配置以及测试所遇到的的问题

    今天我没有继续进行,整理了一线之前犯下的错误.在一开始的android的环境配置的时候,按照网上的教程,我还是走了许多弯道,其中遇到了不少的问题,但是现在都一一解决了. 配置时安装东西少 在配置的时候 ...

  10. scp复制文件到指定端口

    1.scp基本格式 scp file user@host:/dir 2.scp复制文件到指定端口 scp默认连接的端口是22端口,如果ssh不是使用标准的22端口则使用-P(P大写)指定: scp - ...