mysql分区的优点,MySQL分区 – 概述

引言

MySQL的分区方案可以将一个表中的数据分别保存到不同的位置。用户用来分区的规则被称为分区函数。分区函数可以是模运算函数,数值List集合匹配,内置的hash函数或者线性Hash函数。用户可以按照自己的需要选择分区函数,并为分区函数提供一个参数表达式。这个参数表达式可以是一个字段的值,也可以是面向一个或多个字段的函数运算,也可以是一个或多个字段的值的集合,这取决于用户选择的分区方案。

MySQL的分区方案是一种水平分区方案,也就是说一个表中的行可以被分发到不同的物理分区。MySQL5.6暂时还不支持垂直分区。

要判断使用的MySQL是否支持分区可以在MySQL命令行中使用“SHOW PLUGINS;”语句查询MySQL中的插件。如果查询结果中有partition插件,且Status为Active,那么可以执行分区。这个信息也可以查询表INFORMATION_SCHEMA.PLUGINS得到。

分区和存储引擎

在创建分区表的时候,可以使用MySQL支持的大部分存储引擎。MySQL的分区引擎运行在一个独立的层面上,可以与任何存储引擎自由交互。在MySQL5.6中,一个分区表的所有分区的存储引擎必须是一致的。举个例子:对于同一个表,不允许这个表的一个分区的引擎是MyIsam,而另一个分区的引擎是Innodb。

在使用MERGE, CSV, 或者FEDERATED存储引擎的时候,不可以使用分区。

NDB存储引擎只支持KEY或LINEAR KEY分区方案。

在建表语句中,存储引擎的声明要在分区声明语句前面。如下:

1

2

3

4

CREATETABLEti(idINT,amountDECIMAL(7,2),tr_dateDATE)

ENGINE=INNODB

PARTITIONBYHASH(MONTH(tr_date))

PARTITIONS6;

需要注意的点

分区作用于一个表的全部数据上,不可能只对数据分区而不对索引分区,反过来也是的。同样,也不可能只对一个表的部分数据进行分区。

在建表时,可以在分区声明语句中使用DATA DIRECTORY和INDEX DIRECTORY将数据或索引保存到指定的目录。如果分区表使用的是MyIsam引擎,DATA DIRECTORY和INDEX DIRECTORY在windows系统上的表并不适用。如果使用的是Innodb引擎,则全平台都可以使用。

在一个表的分区表达式中使用的字段必须是这个表的全部唯一键(包括主键)的一部分。这就意味着使用如下语句创建的表不能被分区:

1

2

3

4

5

6

7

CREATETABLEtnp(

idINTNOT NULLAUTO_INCREMENT,

refBIGINTNOT NULL,

nameVARCHAR(255),

PRIMARYKEYpk(id),

UNIQUEKEYuk(name)

);

因为主键pk和唯一键uk并没有交集,这就意味着没有任何字段可以用在分区表达式中。

补充一点,如果表中没有主键或唯一键,可以取任意字段用在分区表达式中。

此外,可以使用MAX_ROWS和MIN_ROWS来限制每个分区中保存的记录的最大数量和最小数量。

使用分区的优势

使用分区有如下优势:

可以突破硬盘或文件系统分区的限制,存储更多的数据;

采用删除分区的方式可以轻松地从一个分区表中删除无用的数据,同样也可以创建新的分区来保存新的数据;

在执行查询时,如果在where子句中查询的记录保存在一个或少数几个分区上,查询的效率将会得到极大的提升;MySQL5.6也支持在查询语句中指定要查询的分区,如

1

SELECT*FROMtPARTITION(p0,p1)WHEREc<5

还有一些关于分区的好处,MySQL现在并不支持,但是是可以期待的:

在使用聚集函数时,函数的运算可以在同时在几个分区上并发执行;

可以同时从多个硬盘检索数据,得到更大的吞吐量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值