2011-04-01 44 views
9

Tôi đã bảng ví dụ sau ...MySQL 5.1 Phân vùng

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) 

nói đây là đầy đủ các dữ liệu và tôi muốn khe trong một phân vùng 2011 tại P11 và sau đó làm cho maxvalue p12 là có một cách hiệu quả làm điều này mà không phải bán phá giá và tải lại toàn bộ bảng?

Trả lời

3

Bạn cần phải thả phân vùng MAXVALUE, thêm phân vùng mới và thêm lại phân vùng MAXVALUE mới. Đây là một hoạt động nhanh và bạn sẽ không mất dữ liệu trong bất kỳ phân vùng nào khác với phân vùng MAXVALUE.

Nếu bạn muốn duy trì dữ liệu trong MAXVALUE partion, có một cái nhìn tại REORGAINZE PARTITION và COLALESCE khoản PARTITION của ALTER TABLE http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

tôi đã cùng một vấn đề. Tôi đã bỏ phân vùng MAXVALUE, thêm phân vùng mới nhưng không thêm phân vùng MAXVALUE nữa. Trong trường hợp của tôi, ứng dụng sẽ không bao giờ chèn bất kỳ bản ghi nào được ghi dữ liệu quá nhiều trong tương lai mà nó sẽ yêu cầu phân vùng MAXVALUE.

Việc bảo trì phân vùng diễn ra rất tốt với Sự kiện. Xem http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html

+0

Điều đó hoạt động tốt. Bạn đã tìm thấy phân vùng hoạt động tốt cho bạn chưa? –

+0

Có. Trong MySQL 5.5, tôi có hơn 400 triệu hàng trong một bảng, với hiệu suất khá tuyến tính. Bạn phải cẩn thận trong khi truy vấn các bảng như vậy để đảm bảo rằng có đủ gợi ý trong truy vấn để phân vùng cắt tỉa để hoạt động. – Dojo

0

http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.html gợi ý rằng bạn chỉ có thể thêm phân vùng khác thông qua

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

mặc dù rõ ràng, bạn nên kiểm tra rằng đầu tiên.

+0

Không có điều đó sẽ không hoạt động như một MAXVALUE phải là bảng cuối cùng. Nó sẽ ném lên một lỗi nếu bạn thử thêm một phân vùng sau đó. –

7

Để trả lời bạn câu hỏi chính xác

Tôi muốn khe trong một phân vùng 2011 tại P11 và sau đó làm cho maxvalue p12

Dưới đây là truy vấn

ALTER TABLE part_date3 REORGANIZE PARTITION p11 INTO (
    PARTITION p11 VALUES LESS THAN (TO_DAYS('2011-01-01')), 
    PARTITION p12 VALUES LESS THAN MAXVALUE 
); 
Các vấn đề liên quan