MySQL的經典用法(四)----大幅度提高性能方案,分區表
下面就筆者工作中遇到的時間問題,模擬一下情況對大家進行介紹.
工作中仍然是海量數據出現的情況.每年大概會有幾億條記錄.而且數據的時效性比較強.但歷史數據仍然要求保留.這個時候經過分析和研究,最終決定通過時間字段進行分區.下面是分區表的創建代碼.讀者門在插入了不同年份時間段以後,可以時間字段爲條件進行查詢,可以看到數據庫掃描過的區段.
Sql代碼
CREATE TABLE part_data
(c1 int default NULL,
c2 varchar(30) default NULL,
c3 date default NULL)
partition by range (to_days(c3))
(PARTITION p0 VALUES LESS THAN (to_days('1995-01-01')),
PARTITION p1 VALUES LESS THAN (to_days('1996-01-01')) ,
PARTITION p2 VALUES LESS THAN (to_days('1997-01-01')) ,
PARTITION p3 VALUES LESS THAN (to_days('1998-01-01')) ,
PARTITION p4 VALUES LESS THAN (to_days('1999-01-01')) ,
PARTITION p5 VALUES LESS THAN (to_days('2000-01-01')) ,
PARTITION p6 VALUES LESS THAN (to_days('2001-01-01')) ,
PARTITION p7 VALUES LESS THAN (to_days('2002-01-01')) ,
PARTITION p8 VALUES LESS THAN (to_days('2003-01-01')) ,
PARTITION p9 VALUES LESS THAN (to_days('2004-01-01')) ,
PARTITION p10 VALUES LESS THAN (to_days('2010-01-01')),
PARTITION p11 VALUES LESS THAN MAXVALUE );
CREATE TABLE part_data
(c1 int default NULL,
c2 varchar(30) default NULL,
c3 date default NULL)
partition by range (to_days(c3))
(PARTITION p0 VALUES LESS THAN (to_days('1995-01-01')),
PARTITION p1 VALUES LESS THAN (to_days('1996-01-01')) ,
PARTITION p2 VALUES LESS THAN (to_days('1997-01-01')) ,
PARTITION p3 VALUES LESS THAN (to_days('1998-01-01')) ,
PARTITION p4 VALUES LESS THAN (to_days('1999-01-01')) ,
PARTITION p5 VALUES LESS THAN (to_days('2000-01-01')) ,
PARTITION p6 VALUES LESS THAN (to_days('2001-01-01')) ,
PARTITION p7 VALUES LESS THAN (to_days('2002-01-01')) ,
PARTITION p8 VALUES LESS THAN (to_days('2003-01-01')) ,
PARTITION p9 VALUES LESS THAN (to_days('2004-01-01')) ,
PARTITION p10 VALUES LESS THAN (to_days('2010-01-01')),
PARTITION p11 VALUES LESS THAN MAXVALUE );
分區查詢,可以查看掃描過的區段.當然要加上where子句,以c3時間爲條件進行檢索.若不使用時間字段,分區將失去作用.
Sql代碼
explain partitions select * from part_data/G
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.