文章標簽 ‘partition’

mysql partition 功能

2013年7月30日 沒有評論

自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

分類: MySQL 標簽: , ,

無覓相關文章插件,快速提升流量

30选5怎么中奖