如何在mysql中删除子分区
我有一个带有createddate的表,我在createddate上创建了一个子分区,如下所示:如何在mysql中删除子分区,mysql,Mysql,我有一个带有createddate的表,我在createddate上创建了一个子分区,如下所示: ALTER TABLE tablename PARTITION BY RANGE( YEAR(CreatedDate) ) SUBPARTITION BY HASH(MONTH(CreatedDate) ) ( PARTITION p2015 VALUES LESS THAN (2016) ( SUBPARTITION dec_2015,
ALTER TABLE tablename
PARTITION BY RANGE( YEAR(CreatedDate) )
SUBPARTITION BY HASH(MONTH(CreatedDate) ) (
PARTITION p2015 VALUES LESS THAN (2016) (
SUBPARTITION dec_2015,
SUBPARTITION jan_2015,
SUBPARTITION feb_2015,
SUBPARTITION mar_2015,
SUBPARTITION apr_2015,
SUBPARTITION may_2015,
SUBPARTITION jun_2015,
SUBPARTITION jul_2015,
SUBPARTITION aug_2015,
SUBPARTITION sep_2015,
SUBPARTITION oct_2015,
SUBPARTITION nov_2015
现在我想删除createddate在2015年6月之前创建的所有数据,这意味着删除5个子部分(我尝试直接删除数据,但由于表太大,删除它们需要很多时间)。我应该使用什么来删除这些子分区?使用
HASH()
无法删除分区(因为分区的分配将随总分区数的变化而变化),请参阅:
DROP PARTITION可用于删除一个或多个范围分区或列表分区。此语句不能与哈希或键分区一起使用
相反,您可以使用truncate
一次删除特定分区中的所有数据:
alter table tablename truncate partition 2015年1月,2015年2月,
2015年3月、2015年4月、2015年5月;
Truncate
基本上会删除并重新创建分区,从而在毫秒内删除其内容
如果您有2014年的值,那么不管分区名称如何,它们也将按月份分配,因此2014年12月的值将保留(在分区dec_2015
中)
不幸的是,对于子分区truncate
在5.7.2之前不起作用:
在MySQL 5.7.2之前,TRUNCATE分区不适用于子分区(Bug#14028340,Bug#65184)
在这种情况下,您必须首先更新mysql,或者坚持使用delete
,如果删除整个月所需的时间太长,还可以每天(通过脚本)删除行