首先查看分区表信息
SELECT table_name, partition_name, table_rows FROM information_schema.partitions WHERE table_name=’tablename’
分区的方法:
分区有二个方法: 水平分区、垂直分区
=== 水平分区的几种模式:===
* Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980′s)的数据,90年代(1990′s)的数据以及任何在2000年(包括2000年)后的数据。
* Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如DBA可以建立一个对表主键进行分区的表。
* Key(键值) – 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
* List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。
* Composite(复合模式) – 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。
= 垂直分区(按列分)=
一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。
rege分区例子
CREATE TABLE `xxxxxxxx` ( `crttm` int(11) NOT NULL, `srvid` int(11) NOT NULL, `evtid` int(11) NOT NULL, `aid` int(11) NOT NULL, `rid` int(11) NOT NULL, `itmid` int(11) NOT NULL, `itmnum` int(11) NOT NULL, `gdtype` int(11) NOT NULL, `gdnum` int(11) NOT NULL, `islmt` int(11) NOT NULL, KEY `crttm` (`crttm`), KEY `itemid` (`itmid`), KEY `srvid` (`srvid`), KEY `gdtype` (`gdtype`) ) ENGINE=myisam DEFAULT CHARSET=utf8 PARTITION BY RANGE (crttm) ( PARTITION p201303 VALUES LESS THAN (unix_timestamp('2013-04-01')), PARTITION p201304 VALUES LESS THAN (unix_timestamp('2013-05-01')), PARTITION p201305 VALUES LESS THAN (unix_timestamp('2013-06-01')), PARTITION p201306 VALUES LESS THAN (unix_timestamp('2013-07-01')), PARTITION p201307 VALUES LESS THAN (unix_timestamp('2013-08-01')), PARTITION p201308 VALUES LESS THAN (unix_timestamp('2013-09-01')), PARTITION p201309 VALUES LESS THAN (unix_timestamp('2013-10-01')), PARTITION p201310 VALUES LESS THAN (unix_timestamp('2013-11-01')), PARTITION p201311 VALUES LESS THAN (unix_timestamp('2013-12-01')), PARTITION p201312 VALUES LESS THAN (unix_timestamp('2014-01-01')), PARTITION p201401 VALUES LESS THAN (unix_timestamp('2014-02-01')) );
1. primary key和unique key必须包含在分区key的一部分,否则在创建primary key和unique index时会报”ERROR 1503 (HY000)“
2. 范围分区添加分区只能在最大值后面追加分区
3. 所有分区的engine必须一样
4. 范围分区分区字段:integer、数值表达式、日期列,日期函数表达式(如year(),to_days(),to_seconds(),unix_timestamp())
添加新的分区:
alter table xxxxxxx add partition (partition p0 values less than(1991)); //只能添加大于分区键的分区
删除分区:
alter table xxxxxxx drop partition p0; //可以删除任意分区
删除分区数据:
alter table xxxxxx truncate partition p1,p2; alter table xxxxxx truncate partition all; 或 delete from xxxxxx where separated < '2006-01-01' or (separated >= '2006-01-01' and separated<'2011-01-01');