記錄一次給mysql加日期分割槽的經歷
阿新 • • 發佈:2019-02-19
使用range建立分割槽,先是在本地5.0.45版本mysql上建立,一直失敗。
於是到測試伺服器5.5.35上建立,也失敗,而且錯誤提示資訊模糊。
於是從網上最簡單的做起,最後發現,跟表的主鍵有關係,如果有id主鍵,又想使用time來做分割槽,那麼需要將主鍵設定為:
CREATE TABLE t (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id',
`call_time` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '呼叫時間',
PRIMARY KEY (`id`,call_time)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
PARTITION BY RANGE (TO_DAYS(call_time))(
PARTITION p201503 VALUES LESS THAN (TO_DAYS('2015-04-01')),
PARTITION p201504 VALUES LESS THAN (TO_DAYS('2015-05-01'))
);
還遇到一個問題,在建表的時候,mysql會自動判斷後面partition的then後面的數是否大於前面的,否則會有錯誤提示。
這種表主要是用來存放日誌的,時間久了以後,可能資料量會比較大,至於查詢的sql主要是限定時間,這個效能還有待測試。