mysql分区
2016-03-09 22:10
435 查看
什么是分区?
所谓分区就是将一个表分解成多个区块进行操作和保存,从而降低每次操作的数据量,提高性能。
分区对于应用来说是透明的,在逻辑上还是一个表(跟分表的访问不一样),只是在物理上分为多个区块来存储,每个分区都是一个独立的对象,可以单独被操作。
分区能做什么?
1、进行逻辑数据分割,分割数据能有多个不同的物理文件路径。
2、可以存储更多的数据,突破单个文件的最大限制。
3、提升性能,提高每个分区的读写速度。
4、可以通过删除分区来快速删除数据
5、通过跨多个磁盘的散列分区数据查询,从而提高磁盘i/o性能
6、涉及到sum() count()等聚合处理,能很快的做并行处理,区块并行统计完成后再进行汇总
7、可以备份和恢复独立的分区,这样对大数据量有好处
分区支持的引擎
MyIsam和InnoDB支持分区,MERGE和csv不支持分区。同一个分区表中的所有分区必须是同一个引擎。
确认mysql支持分区
mysql5.1开始引入分区功能,可以用如下方式查看 是否支持分区:
1、老版本用 show variables like ‘%partition%’
2、新版本 可以用 show plugins
分区类型
1、RANGE分区:基于一个连续的区间数值分区
2、LIST分区:
列值匹配一个离散值集合中的某个值来进行分区
3、HASH分区:
基于用户自定义的表达式返回值来进行分区
4、key分区:类似于hash分区,由mysql自身提供的哈希函数分区
分区需要注意的问题
1、如果表中存在主键和外键,分区要从中选择一个作为分区键
2、如果不存在主外键,则可任选一个字段作为分区键
3、5.5版本前,range、list、hash分区要求分区键必须是int型;5.5及以上版本,支持非整形的rang和list分区
分区命名
分区命名基本遵循mysql命名原则,分区命名不区分大小写
无论何种分区类型,分区在创建的时候就自动顺序编号,而且是从0开始记录
创建分区
1、 range分区
create table tbl_users(
uuid int not null,
name varchar(20)
)
PARTITION BY RANGE(uuid)(
PARTITION p0 VALUES LESS THAN(5),
PARTITION P1 VALUES LESS THAN(10)
PARTITION P3 VALUES LESS THAN MAXVALUE
);
查看分区
1、存放数据的文件位置 /usr/bin/mysql_config
2、查看分区信息 select * from information_schema.partitions where table_schema = 'arch1' and table_name ='tbl_user'
3、直接查询分区数据 select * from tbl_user partition(p0)
4、 explain partitions select * from tbl_user where uuid =1; 查看sql执行情况 sql操作的哪个分区
所谓分区就是将一个表分解成多个区块进行操作和保存,从而降低每次操作的数据量,提高性能。
分区对于应用来说是透明的,在逻辑上还是一个表(跟分表的访问不一样),只是在物理上分为多个区块来存储,每个分区都是一个独立的对象,可以单独被操作。
分区能做什么?
1、进行逻辑数据分割,分割数据能有多个不同的物理文件路径。
2、可以存储更多的数据,突破单个文件的最大限制。
3、提升性能,提高每个分区的读写速度。
4、可以通过删除分区来快速删除数据
5、通过跨多个磁盘的散列分区数据查询,从而提高磁盘i/o性能
6、涉及到sum() count()等聚合处理,能很快的做并行处理,区块并行统计完成后再进行汇总
7、可以备份和恢复独立的分区,这样对大数据量有好处
分区支持的引擎
MyIsam和InnoDB支持分区,MERGE和csv不支持分区。同一个分区表中的所有分区必须是同一个引擎。
确认mysql支持分区
mysql5.1开始引入分区功能,可以用如下方式查看 是否支持分区:
1、老版本用 show variables like ‘%partition%’
2、新版本 可以用 show plugins
分区类型
1、RANGE分区:基于一个连续的区间数值分区
2、LIST分区:
列值匹配一个离散值集合中的某个值来进行分区
3、HASH分区:
基于用户自定义的表达式返回值来进行分区
4、key分区:类似于hash分区,由mysql自身提供的哈希函数分区
分区需要注意的问题
1、如果表中存在主键和外键,分区要从中选择一个作为分区键
2、如果不存在主外键,则可任选一个字段作为分区键
3、5.5版本前,range、list、hash分区要求分区键必须是int型;5.5及以上版本,支持非整形的rang和list分区
分区命名
分区命名基本遵循mysql命名原则,分区命名不区分大小写
无论何种分区类型,分区在创建的时候就自动顺序编号,而且是从0开始记录
创建分区
1、 range分区
create table tbl_users(
uuid int not null,
name varchar(20)
)
PARTITION BY RANGE(uuid)(
PARTITION p0 VALUES LESS THAN(5),
PARTITION P1 VALUES LESS THAN(10)
PARTITION P3 VALUES LESS THAN MAXVALUE
);
查看分区
1、存放数据的文件位置 /usr/bin/mysql_config
2、查看分区信息 select * from information_schema.partitions where table_schema = 'arch1' and table_name ='tbl_user'
3、直接查询分区数据 select * from tbl_user partition(p0)
4、 explain partitions select * from tbl_user where uuid =1; 查看sql执行情况 sql操作的哪个分区
相关文章推荐
- MySQL索引操作命令详解
- MySQL学习笔记4(索引)
- mysql-5.7.11-winx64.zip的解压缩安装
- centos 升级php、mysql(webtatic)
- MySQL 主从复制
- checking for main in -lmysqlclient... no
- Mysql-5.7.11-win64位安装--Mysql服务无法启动的问题
- 深入浅出MySQL事务处理和锁机制
- mysql的innodb中事务日志ib_logfile
- 命令行解决mysql中文乱码
- mysql 的简单优化
- mysql查询语句举例
- MySQL数据库字符集引发存储过程【Illegal mix of collations】问题总结
- MySQL数据库中表类型MyISAM与InnoDB的区别
- percona-toolkit系列之介绍和安装(mysql复制工具)
- 防止mysql注入
- mysql int转换成string时类型要用char
- mysql连接的问题
- mysql启动失败:不能创建pid文件
- Mac下新安装的MySQL无法登陆root用户解决方法