您的位置:首页 > 数据库 > MySQL

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操作的哪个分区
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: