標籤:mysql分區
查看mysql的資料分割函數是否啟用:
mysql> show variables like ‘%part%‘;+-------------------+-------+| Variable_name | Value |+-------------------+-------+| have_partitioning | YES |+-------------------+-------+1 row in set (0.00 sec)
建立一個分區表:
CREATE TABLE `test100` ( `xuhao` int(11) NOT NULL, `xuhao2` int(11) NOT NULL,) ENGINE=innodb DEFAULT CHARSET=utf8 PARTITION BY RANGE (xuhao) (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‘)));
添加分區:
alter table xxxxxxx add partition (partition p0 values less than(1991)); //只能添加大於分區鍵的分區
刪除分區:
alter table xxx 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‘);
重定義分區(包括重新命名分區,伴隨移動資料;合并分區)
alter table xxxxx reorganize partition p1,p3,p4 into (partition pm1 values less than(2006),partition pm2 values less than(2011));
rebuild重建分區
alter table xxxxxx rebuild partition pm1/all; //相當於drop所有記錄,然後再reinsert;可以解決磁碟片段
最佳化表
alter table tt2 optimize partition pm1; //在大量delete表資料後,可以回收空間和磁碟重組。但在5.5.30後支援。在5.5.30之前可以通過recreate+analyze來替代,如果用rebuild+analyze速度慢
analzye表
alter table xxxxxx analyze partition pm1/all;
check表
alter table xxxxxx check partition pm1/all;
show create table employees2; //查看分區表的定義show table status like ‘employees2‘\G; //查看錶時候是分區表 如“Create_options: partitioned”select * from information_schema.KEY_COLUMN_USAGE where table_name=‘employees2‘; //查看索引SELECT * FROM information_schema.partitions WHERE table_name=‘employees2‘ //查看分區表explain partitions select * from employees2 where separated < ‘1990-01-01‘ or separated > ‘2
本文出自 “王家東哥” 部落格,謝絕轉載!
mysql的分區