> 데이터 베이스 > MySQL 튜토리얼 > mysql partition 功能

mysql partition 功能

WBOY
풀어 주다: 2016-06-07 16:38:34
원래의
1612명이 탐색했습니다.

自mysql 5.1.3起开始支持分区功能。mysql表中存储的记录和表对应的索引信息,最后都是以文件的方式存储在计算机的硬盘上的,有了分区功能,就可以按照一定的分区规则把这些记录分布到不同的数据文件上,目前分区规则有四种,分别是RANGE、LIST、HASH和KEY,

自mysql 5.1.3起开始支持分区功能。mysql表中存储的记录和表对应的索引信息,最后都是以文件的方式存储在计算机的硬盘上的,有了分区功能,就可以按照一定的分区规则把这些记录分布到不同的数据文件上,目前分区规则有四种,分别是RANGE、LIST、HASH和KEY,另外通过DATA DIRECTORY和INDEX DIRECTORY选项可以把不同的分区数据文件分散到不同的磁盘上,从而进步一提高系统的IO吞吐量。因此按照业务逻辑设计好了分区,可以大大提高查询效率,而且删除数据可能也会很容易。但是分区也有一些限制:1、主键或者唯一索引必须包含分区字段;2、只能通过int类型的字段或者返回int类型的表达式来分区;3、单表最多只能有1024个分区。

默认mysql是开启了分区功能的,可以通过下述查询查看结果:

show variables like '%partition%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
//YES 表示开启
로그인 후 복사

下面也range规则为例介绍一下分区常用的命令。

1、创建分区。可以在创建表的同时创建,也可以在表创建后追加分区。

drop table if exists `netingcn_com`;
create table `netingcn_com` (
  `id` int(11) unsigned not null auto_increment,
  `day` int(11) not null default 0,
  primary key (`id`, `day`)
) engine=innodb default charset=utf8 auto_increment=1;
alter table `netingcn_com` partition by range(`day`) (
  partition p_2012 values less than (20130000),
  partition p_2013 values less than (20140000)
);
或
drop table if exists `netingcn_com`;
create table `netingcn_com` (
  `id` int(11) unsigned not null auto_increment,
  `day` int(11) not null default 0,
  primary key (`id`, `day`)
) engine=innodb default charset=utf8 auto_increment=1
 partition by range(`day`) (
  partition p_2012 values less than (20130000),
  partition p_2013 values less than (20140000)
);
可以explain命令查看分区是否创建成功
explain partitions select * from netingcn_com where day = 20130412;
+----+-------------+--------------+------------+-------+
| id | select_type | table        | partitions | type  |
+----+-------------+--------------+------------+-------+
|  1 | SIMPLE      | netingcn_com | p_2013     | index |
+----+-------------+--------------+------------+-------+
로그인 후 복사

2、增加或删除分区。注意:删除分区的同时,该分区的所有数据也会别删除。

增加分区
alter table netingcn_com add partition (
  partition p_2014 values less than (20150000)
);
删除分区
alter table netingcn_com drop partition p_2012;
로그인 후 복사

3、重新分区。注意:hash和key分区规则不能用REORGANIZE来重新分区

alter table netingcn_com reorganize partition p_2013,p_2014 into (partition p_2014 values less than (20150000));
로그인 후 복사

更多关于mysql 分区功能可以参考:http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿