mysql分区及实例演示

1、为何要分区?

需求:大数据。解决方案:分而治之,更细一点即为。将大表和大索引分为一个更小的操做单元
在mysql中,分区容许将表、索引和索引编排表细分为更小的单元。分区后,每一个分区有本身单独的名称。对于DBA来说,这些分区能够统一管理,也能够分开管理。
可是对于应用程序来说,分区的表和没有分区的表示同样的。换句话来说,分区对于应用是透明的,只是数据库对于数据的从新整理。
Mysql分区,这个是mysql对于分区的官方解释。mysql

1.分区的做用

a)提高性能
应该说,几乎全部分区的目的都是用来提高性能的。不是谁哪天早上吃着鸡蛋灌饼,说我们分个区玩玩吧!不是的。那么分区是如何来提高检索数据的性能的呢?没有分区以前,数据每次在查询和检索老是面向的是整个数据库和表。分区以后,mysql针对每一个分区生成特定的数据文件与索引文件。每次只会检索特定的部分数据,所以能够更好的来执行和维护数据库。究其缘由仍是由于在分区以后表指派到不一样的物理驱动器上,这样即可在同时访问多个分区时减小物理 I/O 争用。
b)易于管理
对于一些无用的冗余的历史数据来说,能够根据分区以后直接删除相应的分区。操做起来更加简便,由于执行数以万计的数据远比直接删除文件来的困难的多、时间也更加的长。
c)容错
分区以后相比分区以前,一张表从以前一个文件分为如今的三个文件。分区以后即便一个文件出现破坏,也不会影响其余数据。
2..经常使用分区方法

RANGE分区
LIST分区
HASH分区
KEY分区sql

2、如何分区?数据库

1.查看数据库是否支持分区服务器

SHOW VARIABLES LIKE '%partition%';

\

对于mysql来说,现阶段支持分区操做的版本有5.1和5.5.如图显示为YES则代表该数据库支持分区操做。less

2.四种常见分区

Range分区

俗称:范围分区。根据表的字段的值,依据给定某段连续的区间来分区。函数

直接建立表时分区性能

create table teacher
(id varchar(20) not null ,
name varchar(20),
age varchar(20),
birthdate date not null,
salary int
)
partition by range(year(birthdate))
(
partition p1 values less than (1970),
partition p2 values less than (1990),
partition p3 values less than maxvalue
);

Ps:建立teacher表,并在建立teacher表同时根据birthdate字段将表划分为p一、p二、p3三个分区。大数据

在建立表后分区spa

ALTER TABLE teacher 
partition by range(year(birthdate))
(
partition p1 values less than (1970),
partition p2 values less than (1990),
partition p3 values less than maxvalue
);

Ps:给已经建立了的表分区,分为p一、p二、p3.索引

LIST分区

俗名:列表分区。其实list分区和range分区应该说都是同样的,不一样的是range分区在分区是的依据是一段连续的区间;而list分区针对的分区依据是一组分布的散列值。

create table student
 (id varchar(20) not null ,
 studentno int(20) not null,
 name varchar(20),
 age varchar(20)
 )
 partition by list(studentno)
 (
 partition p1 values in (1,2,3,4),
 partition p2 values in  (5,6,7,8),
 partition p3 values in (9,10,11)
 );

Ps:如上建立表student,并将student表分为p一、p二、p3三个分区。须要注意的是通常状况下,针对表的分区字段为int等数值类型。

HASH分区

小名:哈希分区。哈希分区主要是依据表的某个字段以及指定分区的数量。

create table user (
  id int(20) not null,
  role varchar(20) not null,
  description varchar(50) 
)
partition by hash(id) 
partitions 10;

Ps:如上建立user表,并将user表平均分为十个分区。比较有限制的就是须要知道表的数据有多少才能更好平均分配分区。

key分区

相似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

create table role( id int(20) not null,name varchar(20) not null)
partition by linear key(id)
partitions 10;

3.分区表管理

对指定表添加分区

alter table user add partition(partition p4 values less than MAXVALUE);

删除指定表指定分区

alter table student drop partition p1;

建立子分区

create table role_subp(id int(20) not null,name int(20) not null)
partition by list(id)
subpartition by hash(name)
subpartitions 3
(
  partition p1 values in(10),
  partition p2 values in(20)
)

复合分区

alter table user
reorganize partition p1,p3 into
(partition p1 values less than (1000));
相关文章
相关标签/搜索