2010-09-20 17 views
6

Czy można partycjonować na podstawie kolumny char?Jak podzielić tabelę MySQL na podstawie kolumny char?

Po przejrzeniu dokumentacji MySQL 5.1 wydaje się, że można używać tylko typów całkowitych.

Czy to prawda? Czy mogę użyć jakiejś funkcji do konwersji znaku na liczbę całkowitą?

Dane pole char zawiera unikatowy identyfikator.

Odpowiedz

15

Partycjonowanie w MySQL 5.1 może dotyczyć wyłącznie kolumn całkowitych (Source). Możesz użyć tylko few partitioning functions na kolumnach niecałkowitych. Na przykład:

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

Można również użyć key partitioning w MySQL 5.1, tak długo, jak klucz podstawowy zawiera wszystkie kolumny w funkcji partycjonowania stołu:

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

Z drugiej strony, w MySQL 5.5 można używać range column partitioning lub list column partitioning dla wielu różnych typów danych, w tym kolumn opartych na znakach.

Lista Kolumny przykład:

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') 
); 

Zakres Kolumny przykład:

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') 
); 

Dalsze informacje:

+0

Dzięki - szukałem głównie w HASH/LIST. –

0

Co masz nadzieję zyskać partycjonowania? HASH i LIST są mało prawdopodobne, aby zapewnić wzrost wydajności. Rzadko przydaje się podział tabeli na mniej niż milion wierszy.

Inne komentarze na temat partycjonowania: http://mysql.rjweb.org/doc.php/partitionmaint

5,6 i 5,7 mają zrelaksowany niektóre ograniczeń wymienić w innych odpowiedzi, ale nadal rzadko partycjonowanie jest lepiej niż indeksowania.

Powiązane problemy