2010-09-20 46 views
6

Có thể phân vùng dựa trên cột char không?Làm thế nào để phân vùng một bảng MySQL dựa trên cột char?

Sau khi xem tài liệu MySQL 5.1, có vẻ như chỉ có thể sử dụng các loại số nguyên.

Điều này có đúng không? Hoặc tôi có thể sử dụng một số chức năng để chuyển đổi các char vào một số nguyên?

Trường char được đề cập chứa một số nhận dạng duy nhất.

Trả lời

15

Phân vùng trong MySQL 5.1 chỉ có thể xử lý các cột số nguyên (Source). Bạn chỉ có thể sử dụng một số few partitioning functions trên các cột không phải số nguyên. Ví dụ:

CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE) 
    ENGINE=INNODB 
    PARTITION BY HASH(MONTH(tr_date)) 
    PARTITIONS 6; 

Bạn cũng có thể sử dụng key partitioning trong MySQL 5.1, miễn là khóa chính bao gồm tất cả các cột trong chức năng phân vùng của bảng:

CREATE TABLE k1 (
    id CHAR(3) NOT NULL PRIMARY KEY, 
    value int 
) 
PARTITION BY KEY(id) 
PARTITIONS 10; 

Mặt khác, trong MySQL 5,5 , bạn có thể sử dụng range column partitioning hoặc list column partitioning trên nhiều loại dữ liệu khác nhau, bao gồm các cột dựa trên ký tự.

Danh sách Cột Ví dụ:

CREATE TABLE expenses (
    expense_date DATE NOT NULL, 
    category VARCHAR(30), 
    amount DECIMAL (10,3) 
); 

ALTER TABLE expenses 
PARTITION BY LIST COLUMNS (category) 
(
    PARTITION p01 VALUES IN ('lodging', 'food'), 
    PARTITION p02 VALUES IN ('flights', 'ground transportation'), 
    PARTITION p03 VALUES IN ('leisure', 'customer entertainment'), 
    PARTITION p04 VALUES IN ('communications'), 
    PARTITION p05 VALUES IN ('fees') 
); 

Dải Cột Ví dụ:

CREATE TABLE range_test (
    code CHAR(3), 
    value INT 
) 
PARTITION BY RANGE COLUMNS(code) (
    PARTITION p0 VALUES LESS THAN ('MMM'), 
    PARTITION p1 VALUES LESS THAN ('ZZZ') 
); 

Đọc thêm:

+0

Cảm ơn - Tôi đang tìm kiếm hầu hết là HASH/LIST. –

0

Bạn hy vọng gì để đạt được bằng cách phân vùng? HASH và LIST không có khả năng mang lại hiệu quả. Nó hiếm khi hữu ích để phân vùng một bảng với ít hơn một triệu hàng.

ý kiến ​​khác trên phân vùng: http://mysql.rjweb.org/doc.php/partitionmaint

5,6 và 5,7 có thoải mái một số các hạn chế đề cập đến trong câu trả lời khác, nhưng vẫn còn phân vùng là hiếm khi tốt hơn so với chỉ mục.

Các vấn đề liên quan