天天看點

mysql delete無法釋放空間用分區代替

随着資料庫資料量的變大,如果要清除某個月的資料,用delete指令删除,mysql不會釋放空間,必須整理碎片或者用修改引擎來重建表,才會釋放空間,但是由于資料量很大,每次重建都得10-12小時的時間,太長了,想到了用mysql分區來解決這種弊病,通過删除分區,可以直接删除資料檔案,那當然也可以釋放空間。

分區的相關知識我就先不講了,就說兩點

分區字段不要有空值,因為空值會預設到無用分區中,這樣查詢會多掃描分區。

查詢條件最好要帶着分區字段,不然性能會很低,需要在所有分區裡掃一遍。

添加分區腳本

ENGINE=InnoDB PARTITION BY RANGE COLUMNS(date)(

 PARTITION p201410 VALUES less than (20141031),

 PARTITION p201411 VALUES less than (20141131),

 PARTITION p201412 VALUES less than (20141231),

 PARTITION p201501 VALUES less than (20150131),

...........................

 PARTITION pcatchall VALUES LESS THAN MAXVALUE

);

删除分區

 ALTER TABLE 表 DROP PARTITION p201010;

合并分區

ALTER TABLE b   REORGANIZE PARTITION  p1,p2 into  (p12);

拆分分區

現在來說分區的拆分和合并暫時用不上,先寫寫吧