博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 分区
阅读量:6469 次
发布时间:2019-06-23

本文共 2773 字,大约阅读时间需要 9 分钟。

一、为什么要分区?

需求:大数据。解决方案:分而治之,更细一点即为。将大表和大索引分为一个更小的操作单元

在mysql中,分区允许将表、索引和索引编排表细分为更小的单元。分区后,每个分区有自己单独的名称。对于DBA来讲,这些分区可以统一管理,也可以分开管理。
但是对于应用程序来讲,分区的表和没有分区的表示一样的。换句话来讲,分区对于应用是透明的,只是对于数据的重新整理。
Mysql分区,这个是对于分区的官方解释。

1.分区的作用

a)提升性能

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

二、如何分区?

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

1
SHOW VARIABLES
LIKE
 '%partition%';

 

\

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

2.四种常见分区

Range分区

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

 

直接创建表时分区

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
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字段将表划分为p1、p2、p3三个分区。

 

 

在创建表后分区

 

 

1
2
3
4
5
6
7
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:给已经创建了的表分区,分为p1、p2、p3.

 

LIST分区

 

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

 

1
2
3
4
5
6
7
8
9
10
11
12
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表分为p1、p2、p3三个分区。需要注意的是一般情况下,针对表的分区字段为int等数值类型。

 

HASH分区

 

 

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

 

1
2
3
4
5
6
7
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服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

 

 

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

 

 

 

 

3.分区表管理

 

对指定表添加分区

 

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

 

删除指定表指定分区

alter table student drop partition p1;

 

创建子分区

 

1
2
3
4
5
6
7
8
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)
)

 

 

 

复合分区

 

 

 

 

1
2
3
alter
 table user
reorganize partition p1,p3 
into
(partition p1 
values
 less than (1000));

转载于:https://www.cnblogs.com/lpyan/p/5612022.html

你可能感兴趣的文章
iOS快速清除全部的消息推送
查看>>
java单例模式深度解析
查看>>
什么是堆、栈?
查看>>
【学习笔记】阿里云Centos7.4下配置Nginx
查看>>
VuePress手把手一小時快速踩坑
查看>>
dnsmasq安装使用和体验
查看>>
学习constructor和instanceof的区别
查看>>
Vijos P1881 闪烁的星星
查看>>
ABP理论学习之领域服务
查看>>
Qt 控制watchdog app hacking
查看>>
让所有IE支持HTML5的解决方案
查看>>
RDD之五:Key-Value型Transformation算子
查看>>
Windows 搭建Hadoop 2.7.3开发环境
查看>>
python操作mysql数据库实现增删改查
查看>>
percona 5.7.11root初始密码设置
查看>>
Cognitive Security的异常检测技术
查看>>
Msg 15138 The database principal owns a schema in the database, and cannot be dropped.
查看>>
Cassandra 中的Snitch
查看>>
Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
查看>>
生活杂事--度过十一中秋
查看>>