【问题标题】:How to make partitioning in existing mysql table?如何在现有的mysql表中进行分区?
【发布时间】:2012-08-10 19:58:11
【问题描述】:

我有一个名为 tbl_rtdata 的表。我删除了该表中的所有分区,并按以下方式创建了新分区。

ALTER TABLE tbl_rtdata  PARTITION BY RANGE (Month(fld_date))

SUBPARTITION BY HASH (Day(fld_date)) SUBPARTITIONS 12(   
PARTITION Apr_0 VALUES LESS THAN (2012-05-01),
PARTITION May_1 VALUES LESS THAN (2012-06-01),    
PARTITION Jun_2 VALUES LESS THAN (2012-07-01),  
PARTITION Jul_3 VALUES LESS THAN (2012-08-01),
PARTITION Aug_4 VALUES LESS THAN (2012-09-01),
PARTITION Sep_5 VALUES LESS THAN (2012-10-01),
PARTITION Oct_6 VALUES LESS THAN (2012-11-01),  
PARTITION Nov_7 VALUES LESS THAN (2012-12-01),
PARTITION Dec_8 VALUES LESS THAN MAXVALUE );

但是我得到了一个错误: VALUES LESS THAN value must be strictly increasing for each partition.

如果我在查询中删除子分区,它会显示分区 'Apr_0' 的错误 VALUES 值必须具有 INT 类型

我应该怎么做才能从中恢复?

【问题讨论】:

  • 您使用的是哪个版本的 MySQL?

标签: mysql database


【解决方案1】:

我认为MySQL < 5.5 不支持它 试试这个:手动here

ALTER TABLE tbl_rtdata PARTITION BY RANGE COLUMNS (fld_date) (
  PARTITION Apr_0 VALUES LESS THAN ('2012-05-01'),
  PARTITION May_1 VALUES LESS THAN ('2012-06-01'),
  PARTITION Dec_8 VALUES LESS THAN (MAXVALUE)
  );

【讨论】:

  • 返回错误代码:1697。分区 'Apr_0' 的 VALUES 值必须为 INT 类型
【解决方案2】:

我找到了很简单的答案,使用 to_days 函数

ALTER TABLE tbl_rtdata  PARTITION BY RANGE (Month(fld_date))
(   
PARTITION p_Apr VALUES LESS THAN (TO_DAYS('2012-05-01')),
PARTITION p_May VALUES LESS THAN (TO_DAYS('2012-06-01')), 
PARTITION p_Jun VALUES LESS THAN (TO_DAYS('2012-07-01')),  
PARTITION p_Jul VALUES LESS THAN (TO_DAYS('2012-08-01')),
PARTITION p_Aug VALUES LESS THAN (TO_DAYS('2012-09-01')),
PARTITION p_Sep VALUES LESS THAN (TO_DAYS('2012-10-01')),
PARTITION p_Oct VALUES LESS THAN (TO_DAYS('2012-11-01')),  
PARTITION p_Nov VALUES LESS THAN (TO_DAYS('2012-12-01')),
PARTITION p_Dec VALUES LESS THAN MAXVALUE );

【讨论】:

  • 您确定这按预期工作吗?据我所见,所有值(几乎)总是放在p_Apr 中,因为Month(fld_date) 总是返回一个小于TO_DAYS('2012-05-01')的值
  • 应该是BY RANGE(TO_DAYS(fld_date))
  • 如果您要删除旧分区,请参阅mysql.rjweb.org/doc.php/partitionmaint 了解如何执行此操作的详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2011-06-27
  • 2019-01-10
  • 2014-06-18
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多