2009-10-16 17 views
46

Przeczytałem dokumentację (http://dev.mysql.com/doc/refman/5.1/en/partitioning.html), ale chciałbym, własnymi słowami, określić, co to jest i dlaczego jest używane.Co to jest partycjonowanie MYSQL?

  1. Jest używany głównie do wielu serwerów, więc nie przeciąga jednego serwera?
  2. Część danych będzie więc na serwerze1, a część danych będzie na serwerze2. Serwer 3 "wskaże" serwer1 lub serwer2 ... czy to działa?
  3. Dlaczego dokumentacja MYSQL koncentruje się na partycjonowaniu na tym samym serwerze ... jeśli celem jest rozpowszechnienie go na serwerach?

Odpowiedz

122

Ideą partycjonowania nie jest używanie wielu serwerów, ale używanie wielu tabel zamiast jednej tabeli. Możesz podzielić tabelę na wiele tabel, dzięki czemu możesz mieć stare dane w jednej tabeli podrzędnej i nowe dane w innej tabeli. Następnie baza danych może zoptymalizować zapytania, w których żądają nowych danych, wiedząc, że znajdują się w drugiej tabeli. Co więcej, definiujesz sposób partycjonowania danych.

Prosty przykład z the MySQL Documentation:

CREATE TABLE employees (
    id INT NOT NULL, 
    fname VARCHAR(30), 
    lname VARCHAR(30), 
    hired DATE NOT NULL DEFAULT '1970-01-01', 
    separated DATE NOT NULL DEFAULT '9999-12-31', 
    job_code INT, 
    store_id INT 
) 
PARTITION BY RANGE (YEAR(separated)) (
    PARTITION p0 VALUES LESS THAN (1991), 
    PARTITION p1 VALUES LESS THAN (1996), 
    PARTITION p2 VALUES LESS THAN (2001), 
    PARTITION p3 VALUES LESS THAN MAXVALUE 
); 

Pozwala to przyspieszyć np

  1. Usunięcie starych danych przez prosty:

    ALTER TABLE employees DROP PARTITION p0; 
    
  2. Baza danych może przyspieszyć zapytanie tak:

    SELECT COUNT(*) 
    FROM employees 
    WHERE separated BETWEEN '2000-01-01' AND '2000-12-31' 
    GROUP BY store_id; 
    

Wiedza o tym, że wszystkie dane są przechowywane tylko na partycji p2.

+2

# 2 nazywa się "przycinanie" – longneck

+17

To jest najlepsze wytłumaczenie na temat partycjonowania w Internecie. –