2013-04-08 21 views
5

我想用「月」如何創建當年的每月分區

我想這個分區我的數據,

ALTER TABLE t1 PARTITION BY RANGE(TO_DAYS(FROM_UNIXTIME(transaction_date)))(
PARTITION JAN VALUES LESS THAN (TO_DAYS('2013-02-01')), 
PARTITION FEB VALUES LESS THAN (TO_DAYS('2013-03-01')), 
PARTITION MAR VALUES LESS THAN (TO_DAYS('2013-04-01')), 
PARTITION APR VALUES LESS THAN (TO_DAYS('2013-05-01')), 
PARTITION MAY VALUES LESS THAN (TO_DAYS('2013-06-01')), 
PARTITION JUN VALUES LESS THAN (TO_DAYS('2013-07-01')), 
PARTITION JUL VALUES LESS THAN (TO_DAYS('2013-08-01')), 
PARTITION AUG VALUES LESS THAN (TO_DAYS('2013-09-01')), 
PARTITION SEP VALUES LESS THAN (TO_DAYS('2013-10-01')), 
PARTITION `OCT` VALUES LESS THAN (TO_DAYS('2013-11-01')), 
PARTITION NOV VALUES LESS THAN (TO_DAYS('2013-12-01')), 
PARTITION `DEC` VALUES LESS THAN (TO_DAYS('2014-01-01')) 

);

transaction_date INT NOT NULL //store date by UNIX_TIMESTAMP() 

錯誤代碼:1564 這個分區功能是不允許

如何創建當年的每月分區?

回答

4

這可能是bug或限制。

對於每月的分區,你可以試試這個:

SQLFiddle Demo

ALTER TABLE t1 PARTITION BY RANGE(transaction_date)(
PARTITION JAN VALUES LESS THAN (UNIX_TIMESTAMP('2013-02-01')), 
PARTITION FEB VALUES LESS THAN (UNIX_TIMESTAMP('2013-03-01')), 
PARTITION MAR VALUES LESS THAN (UNIX_TIMESTAMP('2013-04-01')), 
PARTITION APR VALUES LESS THAN (UNIX_TIMESTAMP('2013-05-01')), 
PARTITION MAY VALUES LESS THAN (UNIX_TIMESTAMP('2013-06-01')), 
PARTITION JUN VALUES LESS THAN (UNIX_TIMESTAMP('2013-07-01')), 
PARTITION JUL VALUES LESS THAN (UNIX_TIMESTAMP('2013-08-01')), 
PARTITION AUG VALUES LESS THAN (UNIX_TIMESTAMP('2013-09-01')), 
PARTITION SEP VALUES LESS THAN (UNIX_TIMESTAMP('2013-10-01')), 
PARTITION `OCT` VALUES LESS THAN (UNIX_TIMESTAMP('2013-11-01')), 
PARTITION NOV VALUES LESS THAN (UNIX_TIMESTAMP('2013-12-01')), 
PARTITION `DEC` VALUES LESS THAN (UNIX_TIMESTAMP('2014-01-01')) 
); 

如果你有DATE作爲數據類型的列,那麼你可以嘗試一下本作每月paritioning內每日分區: 嘗試在MySQL中使用sub-partitioning

SQLFiddle Demo

ALTER TABLE t1 
PARTITION BY RANGE(MONTH(FROM_UNIXTIME(transaction_date)) 
SUBPARTITION BY HASH(DAY(FROM_UNIXTIME(transaction_date))) 
SUBPARTITIONS 31 (
    PARTITION p0 VALUES LESS THAN (2), 
    PARTITION p1 VALUES LESS THAN (3), 
    PARTITION p2 VALUES LESS THAN (4), 
    PARTITION p3 VALUES LESS THAN (5), 
    PARTITION p4 VALUES LESS THAN (6), 
    PARTITION p5 VALUES LESS THAN (7), 
    PARTITION p6 VALUES LESS THAN (8), 
    PARTITION p7 VALUES LESS THAN (9), 
    PARTITION p8 VALUES LESS THAN (10), 
    PARTITION p9 VALUES LESS THAN (11), 
    PARTITION p10 VALUES LESS THAN (12), 
    PARTITION p11 VALUES LESS THAN MAXVALUE 
); 
+0

@ Omesh! Thx的答覆,但米麪臨同樣的問題「錯誤代碼:1564此分區功能是不允許的」。你在SQL小提琴上的例子是gud。你對這個錯誤有什麼想法嗎? – 2013-04-10 05:35:29

+0

檢查您的示例更新的SQLFiddle。 – Omesh 2013-04-10 07:23:51