2011-04-01 15 views
9

私は次の例表を持っている...のMySQL 5.1パーティショニング

mysql> CREATE TABLE part_date3 
    ->  ( c1 int default NULL, 
    -> c2 varchar(30) default NULL, 
    -> c3 date default NULL) engine=myisam 
    ->  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); 
Query OK, 0 rows affected (0.00 sec) 

が、これはデータの完全であると私はP11で2011パーティション内のスロット、その後、P12のMAXVALUEを作りたいと言うの効率的な方法がありますテーブル全体をダンプして再ロードせずにこれを行うのですか?

答えて

3

MAXVALUEパーティションを削除し、新しいパーティションを追加して、新しいMAXVALUEパーティションをもう一度追加する必要があります。これは高速な操作で、MAXVALUEパーティション以外のパーティションでデータを失うことはありません。

あなたがMAXVALUEのpartionでデータを保持したい場合は

は、REORGAINZEのPARTITIONを見ていると私は同じ問題を抱えていたのALTER TABLE http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

のPARTITION句をCOALESCE。私はMAXVALUEパーティションを削除し、新しいパーティションを追加しましたが、MAXVALUEパーティションを再度追加しませんでした。私の場合、アプリケーションは、あまりにも多くのレコードを挿入することは決してないので、MAXVALUEパーティションが必要になります。

パーティションのメンテナンスはイベントでうまくいきます。 http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html

+0

それは素晴らしい作品です。パーティション化がうまく機能していますか? –

+0

はい。 MySQL 5.5では、1つのテーブルに4億以上の行があり、かなりリニアなパフォーマンスがあります。このようなテーブルを照会する際には、パーティションプルーニングが機能するのに十分なヒントがクエリに存在するように注意する必要があります。 – Dojo

0

http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.htmlは明らかに、あなたが最初にそれをテストする必要がありますけれどもあなたは、単に

ALTER TABLE `part_date3` 
ADD PARTITION (PARTITION p12 VALUES LESS THAN (to_days('2011-01-01'))); 

を介して別のパーティションを追加することができますことを示唆しています。

+0

にありますいいえ、MAXVALUEは最後のテーブルでなければならないので動作しません。後でパーティションを追加しようとすると、エラーが発生します。 –

7

私はP12のMAXVALUEここ

を行い、その後P11で2011パーティション内のスロットとしたいあなたに正確な質問

に答えるために参照してください。クエリ

ALTER TABLE part_date3 REORGANIZE PARTITION p11 INTO (
    PARTITION p11 VALUES LESS THAN (TO_DAYS('2011-01-01')), 
    PARTITION p12 VALUES LESS THAN MAXVALUE 
); 
関連する問題