Mam tabelę z 1,4 miliarda rekordów. Struktura tabeli jest następująca:
CREATE TABLE text_page (
text VARCHAR(255),
page_id INT UNSIGNED
) ENGINE=MYISAM DEFAULT CHARSET=ascii
Wymagane jest utworzenie indeksu nad kolumną text
.
Rozmiar stołu wynosi około 34G.
Próbowałem utworzyć indeks za pomocą następującej instrukcji:
ALTER TABLE text_page ADD KEY ix_text (text)
Po 10 godzinach oczekiwania w końcu zrezygnowałem z tego podejścia.
Czy istnieje jakieś realne rozwiązanie tego problemu?
AKTUALIZACJA : jest mało prawdopodobne, że tabela zostanie zaktualizowana, wstawiona lub usunięta. Powodem, dla którego należy utworzyć indeks w kolumnie, text
jest to, że tego rodzaju zapytania SQL byłyby często wykonywane:
SELECT page_id FROM text_page WHERE text = ?
AKTUALIZACJA : Rozwiązałem problem, dzieląc tabelę na partycje.
Stół jest podzielony na 40 części na kolumnie text
. Następnie utworzenie indeksu na stole zajmuje około 1 godziny.
Wydaje się, że tworzenie indeksu MySQL staje się bardzo wolne, gdy rozmiar tabeli staje się bardzo duży. Partycjonowanie zmniejsza tabelę na mniejsze pnie.
CREATE INDEX
stwierdzenia?