Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中删除子分区_Mysql - Fatal编程技术网

如何在mysql中删除子分区

如何在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,

我有一个带有createddate的表,我在createddate上创建了一个子分区,如下所示:

    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
,如果删除整个月所需的时间太长,还可以每天(通过脚本)删除行