MySQL分区的概念分类用法
来源:互联网 发布:acronis linux备份 编辑:程序博客网 时间:2024/05/21 14:46
分区有range 分区、list 分区、hash 分区、key 分区。
分区的限制:1.主键/唯一键必须包含分区键,且没有列前要求
2.分区名不区分大小写 /*一般情况下由于MySQL数据库和表对应系统中的文件和目录,所以大小写敏感问题取决于系统*/
range 分区:基于一个给定的连续范围进行分区
range分区的限制:
1.区间连续且不能重叠
2.range分区要求分区键是整数类型,如果需要使用其他类型,需要使用range columns分区,否则只能使用函数处理转化为整型
用法:
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`ttime` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
PARTITION BY RANGE COLUMNS(ttime)
(PARTITION p0 VALUES LESS THAN ('2017-01-01') ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN ('2017-02-01') ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN maxvalues ENGINE = InnoDB) ;
(maxvalues 表示最大的可能的整数值)
range 分区的应用场景:
1.需要删除过期的数据时,alter table t drop partition p0。(效率比delete快)
2.运行包括分区键的范围查询。(可以快速确定要查询的分区,扫描少量分区即可得到查询结果)
list 分区:基于枚举出的值列表分区
list 分区的限制:
1.list分区要求分区键是整数类型,如果需要使用其他类型可以使用list columns分区
用法:
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`name` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
PARTITION BY LIST (id)
(PARTITION p0 VALUES IN (1,3,10) ENGINE = InnoDB,
PARTITION p1 VALUES IN (2,5,12) ENGINE = InnoDB,
PARTITION p2 VALUES IN (9,6,4) ENGINE = InnoDB) ;
查看分区情况:(查看information_schema.partitions表)
mysql> select partition_name,partition_expression,partition_description from partitions where table_name='t';
+----------------+----------------------+-----------------------+
| partition_name | partition_expression | partition_description |
+----------------+----------------------+-----------------------+
| p0 | `name` | '1q','3a','4l' |
| p1 | `name` | 'a2','5','6' |
+----------------+----------------------+-----------------------+
2 rows in set (0.00 sec)
hash 分区:基于给定的分区的数目,将数据分布到不同的分区
hash分区根据分配的算法的不一样分为常规hash分区和线性hash分区
hash分区的限制:只支持分区键为整数的分区
hash 分区应用场景:用来分散热点读,使数据在预先设置的几个分区尽量平均分布
语法:
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
PARTITION BY HASH (id)
PARTITIONS 3 ;
key 分区:类似hash分区,但是key支持出test,blob之外的所有数据类型做分区键
语法:
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
PARTITION BY KEY (`name`)
PARTITIONS 3 ;
复合分区:分区表中对每一个分区的再次分割。
复合分区适用于保存非常大量的数据记录。
用法:
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
PARTITION BY RANGE COLUMNS(id)
SUBPARTITION BY HASH (id)
SUBPARTITIONS 2
(PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB);
综上,range、list都使用range column、list column来代替。
阅读全文
0 0
- MySQL分区的概念分类用法
- mysql数据库中分区的概念
- mysql分区分表的概念
- mysql 分区概念测试
- 表分区的概念
- Linux的分区概念
- Hive分区的概念
- 数据库分区的概念
- 文件系统分区的概念
- MySQL分区(partition)相关概念
- Linux系统的分区概念
- ORACLE表分区的概念
- 主分区 拓展分区 逻辑分区的概念
- ARC的概念和分类的概念
- mysql 的分区
- MySQL的分区
- MySQL的表分区
- mysql的分区
- 【hdu 1241】 Oil Deposits (dfs+bfs)
- 排序算法---快速排序(Quick Sort)
- C# 中的MDI 窗体
- opencv头文件分析
- JAVA基础1
- MySQL分区的概念分类用法
- lambda表达式
- Java进阶(三十七)java 自动装箱与拆箱
- HDU 1102 Constructing Roads 基础最小生成树★
- 寻找最大数
- Codeforces Round #426 (Div. 2)(A+B)
- 2017年7月31号训练日记
- 支付宝支付集成
- 文件的相关操作函数