2011-04-01 15 views
9

etkin bir yolu yoktur ben ...MySQL 5.1 Bölümleme

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) 

bu verilerin dolu Aşağıdaki örnek tablo Say ettim ve p11 bir 2011 bölüm takarak ve ardından p12 MAXVALUE yapmak istiyorum tüm tabloyu boşaltmadan ve yeniden yüklemeden bunu yapmak?

cevap

3

MAXVALUE bölümünü bırakmanız, yeni bölümü eklemeniz ve yeni bir MAXVALUE bölümü eklemeniz gerekiyor. Bu hızlı bir işlemdir ve MAXVALUE bölümü dışındaki herhangi bir bölümdeki verileri kaybetmezsiniz.

Eğer MAXVALUE iç bölme verileri korumak istiyorsanız

, REORGAINZE BÖLÜNME bir göz var ve aynı sorun vardı ALTER TABLE http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

ait BÖLME maddelerini birleşmek. MAXVALUE bölümünü bıraktım, yeni bölümü ekledim ancak MAXVALUE bölümünü tekrar eklemedim. Benim durumumda, uygulama hiçbir zaman MAXVALUE bölümü gerektireceğinden çok fazla veri kaydı yapmaz.

Bölüm bakımı, Olaylar ile çok iyi gider. http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html

+0

Bu harika çalışıyor. Bölümleme işlemini sizin için iyi buldunuz mu? –

+0

Evet. MySQL 5.5'te oldukça lineer bir performansla bir tabloda 400 milyondan fazla satır var. Bu tür tabloları sorgularken dikkatli olmalısınız, böylelikle bölme budaması için sorguda yeterli ipucu olduğundan emin olun. – Dojo

0

http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.html açıkçası, önce o test etmelisiniz olsa sadece

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

üzerinden başka bölüm ekleyebilir düşündürmektedir.

+0

olduğunu Hayır, MAXVALUE olarak işe yaramaz, son masa olmalı. Bir bölüm ekledikten sonra bir hata atar. –

7

Ben p12 MAXVALUE İşte

yapmak sonra p11 bir 2011 bölüm yarmak ve istediğiniz size sorunun asıl

cevaplamak için Bkz sorgu

ALTER TABLE part_date3 REORGANIZE PARTITION p11 INTO (
    PARTITION p11 VALUES LESS THAN (TO_DAYS('2011-01-01')), 
    PARTITION p12 VALUES LESS THAN MAXVALUE 
);