0
我有一個30M行表,我想按日期對其進行分區。Mysql將所有數據放入一個分區
mysql > SHOW CREATE TABLE `parameters`
CREATE TABLE `parameters` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`add_time` datetime DEFAULT NULL,
...(etc)
) ENGINE=MyISAM AUTO_INCREMENT=28929477 DEFAULT CHARSET=utf8
表存儲過去5年的數據,行數顯着增加。我想分幾年(2009年,2010年,2011年,2012年,2013年)。
ALTER TABLE parameters DROP PRIMARY KEY, ADD INDEX(id);
ALTER TABLE parameters PARTITION BY RANGE (TO_DAYS(id)) (
PARTITION y2009 VALUES LESS THAN (TO_DAYS('2010-01-01')),
PARTITION y2010 VALUES LESS THAN (TO_DAYS('2011-01-01')),
PARTITION y2011 VALUES LESS THAN (TO_DAYS('2012-03-01')),
PARTITION y2012 VALUES LESS THAN (TO_DAYS('2013-01-01')),
PARTITION y2013 VALUES LESS THAN MAXVALUE
);
Everyting適用於開發的服務器上,但有生產服務器上的問題。 問題:幾乎所有的行都移動到第一個分區(y2009)。但數據是按年份均勻分佈的。物理上,DATA文件夾中有大量的y2009.myd文件,其他分區的大小更小。 我也試圖重組的第一個分區,以排除空日期:
alter table raw
reorganize partition y2012 into (
PARTITION y0 VALUES LESS THAN (0),
PARTITION y2012 VALUES LESS THAN (TO_DAYS('2013-01-01')),
);
PS:生產和開發服務器具有相同版本的MySQL 5.1.37的
非常感謝。我犯了一個粗心的錯誤。 – zenio 2013-04-26 06:28:04