文档章节

MySQL表分区技术详细介绍

九州暮云
 九州暮云
发布于 2016/03/24 11:03
字数 1091
阅读 144
收藏 6

1、概述

数据库单表到达一定量后,性能会有衰减,像mysql\sql server等犹为明显,所以需要把这些数据进行分区处理。同时有时候可能出现数据剥离什么的,分区表就更有用处了!

MySQL 5.1 中新增的分区(Partition)功能就开始增加,优势也越来越明显了:

  • 与单个磁盘或文件系统分区相比,可以存储更多的数据
  • 很容易就能删除不用或者过时的数据
  • 一些查询可以得到极大的优化
  • 涉及到 SUM()/COUNT() 等聚合函数时,可以并行进行
  • IO吞吐量更大
  • 分区允许可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。

2、分区技术支持

在5.6之前,使用这个参数查看当将配置是否支持分区:

mysql> SHOW VARIABLES LIKE '%partition%';
+-----------------------+-------+
|Variable_name          | Value |
+-----------------------+-------+
| have_partition_engine | YES   |
+-----------------------+-------+

如果是yes表示你当前的配置支持分区。 在5.6及以采用后,则采用如下方式进行查看:

mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
..................................................................................
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
+----------------------------+----------+--------------------+---------+---------+

42 rows in set (0.00 sec) 最后一行,可以看到partition是ACTIVE的,表示支持分区。

3、分区类型及举例

3.1 范围分区

RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。如时间,连续的常量值等 --按年分区

mysql> use mytest;
Database changed
mysql> create table range_p( 
    -> perid int(11), 
    -> pername char(12) not null, 
    -> monsalary DECIMAL(10,2),
    -> credate datetime 
    -> ) partition by range(year(credate))( 
    -> partition p2011 values less than (2011), 
    -> partition p2012 values less than (2012), 
    -> partition p2013 values less than (2013), 
    -> partition p2014 values less than (2014),
    -> partition p2015 values less than maxvalue 
    -> );
Query OK, 0 rows affected (0.12 sec)

3.2 列举分区

LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。比如说类似性别(1,2)等属性值。

mysql> create table list_p( 
    -> perid int(11), 
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime 
    -> ) partition by list(sex) (
    -> partition psex1 values in(1),
    -> partition psex2 values in(2));
Query OK, 0 rows affected (0.06 sec)

注意,list只能是数字,使用字符会报错ERROR 1697 (HY000): VALUES value for partition 'psex1' must have type INT。

3.3 离散分区

HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包>含MySQL中有效的、产生非负整数值的任何表达式。

--以int字段hash分区

create table hash_p( 
perid int(11), 
pername char(12) not null,
sex int(1) not null,
monsalary DECIMAL(10,2),
credate datetime 
) partition by hash (perid) 
partitions 8;

--以时间函数hash分区

mysql> create table hash_p( 
    -> perid int(11), 
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime 
    -> ) partition by hash (year(credate)) 
    -> partitions 8;
Query OK, 0 rows affected (0.11 sec)

3.4 键值分区

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

mysql> create table key_p( 
    -> perid int(11), 
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime 
    -> ) partition by key (perid) 
    -> partitions 8;
Query OK, 0 rows affected (0.12 sec)

3.5 其它说明

mysql-5.5开始支持COLUMNS分区,可视为RANGE和LIST分区的进化,COLUMNS分区可以直接使用非整形数据进行分区。COLUMNS分区支持以下数据类型: 所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL则不支持。 日期类型,如DATE和DATETIME。其余日期类型不支持。 字符串类型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT类型不支持。 COLUMNS可以使用多个列进行分区。

mysql> create table range_p( 
    -> perid int(11), 
    -> pername char(12) not null, 
    -> monsalary DECIMAL(10,2),
    -> credate datetime 
    -> ) PARTITION BY RANGE COLUMNS (credate)( 
    -> partition p20151 values less than ('2015-04-01'), 
    -> partition p20152 values less than ('2015-07-01'), 
    -> partition p20153 values less than ('2015-10-01'), 
    -> partition p20154 values less than ('2016-01-01'),
    -> partition p20161 values less than ('2016-04-01'),
    -> partition partlog values less than maxvalue 
    -> );
Query OK, 0 rows affected (0.12 sec)

官方资料:https://dev.mysql.com/doc/refman/5.5/en/partitioning.html

本文转载自:http://blog.itpub.net/29371470/viewspace-1401281/

九州暮云
粉丝 62
博文 156
码字总数 107390
作品 0
海淀
高级程序员
私信 提问
什么是分表和分区 MySql数据库分区和分表方法

1、为什么要分表和分区 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉...

污湖洞主
2017/09/14
0
0
mysql分区功能详细介绍,以及实例

这篇文章主要介绍了MySQL的表分区,例如什么是表分区、为什么要对表进行分区、表分区的4种类型详解等,需要的朋友可以参考下: 一、什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干...

阿泽Aze
2018/06/26
0
0
MySQL 分表和表分区

为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉...

mickelfeng
2016/02/01
108
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

haorizi
2013/03/11
0
0
mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

haorizi
2013/03/11
0
1

没有更多内容

加载失败,请刷新页面

加载更多

系列一、入门教程web端实现地图功能

废话不多说,社会我多多 实现步骤如下 第一步、在高德api注册账户 搜索高德api点击进入官网,自己注册一个账号,你懂得怎么注册撒 点击进入下图画框位置,来到官网api入门教程 第二步、按照以...

我叫小糖主
18分钟前
4
0
springboot统一校验validator实现

第一步: pom.xml需引入spring-boot-start-web依赖,其中包含validator框架包 <!--Spring Boot Web依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifact......

zzx10
20分钟前
1
0
vue组件系列-预览、放大、缩小、旋转

这个用的是别人的,如果有问题,估计改起来会很纠结。 安装 npm install v-viewer --save 卸载 npm uninstall v-viewer 注册 在main.js中 // The Vue build version to load with the `impor...

轻轻的走过
21分钟前
1
0
Taro Input输入内容无法绑定state问题

在onInput事件中,返回内容,返回内容即是输入框内容 例如只能输入一个小数点: <Input type='digit' placeholder='带小数点的数字键盘' value={this.state.advance} onInput={ e => this.ch......

步步登高
23分钟前
0
0
Windows10远程连接CentOS7(搭建Xrdp服务器)

Windows10远程连接CentOS7(搭建Xrdp服务器) 听语音 浏览:0 | 更新:2018-02-11 12:56 1 2 3 4 5 6 7 分步阅读 通过VNC或Xdmcp的方式远程连接linux图形桌面,虽然都很方便,但有个缺点就是...

linjin200
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部