GISTPonowne indeksowanie ogromna baza danych (angielska Wikipedia) skutecznie
Przed wykonaniem masywny 40+ GB import angielskiej Wikipedii, musiałem tymczasowo usunąć indeksy i pola automatycznego przyrostu z trzech tabel ("strona", "rewizja" i "tekst") do obsługi obciążenia. Teraz udało mi się w końcu zaimportować angielską Wikipedię na mój komputer lokalny i utworzyć lokalne odbicie (MediaWiki API). Yay!
Jednak teraz muszę ponownie utworzyć indeksy i pola automatycznego zwiększania w mniej niż dekadę. Na szczęście (1) wykonałem wiele zrzutów ekranowych odpowiednich tabel w phpmyadminie, zanim usunąłem indeksy i pola; (2) Mogę z niezwykłą precyzją wyjaśnić kroki podjęte przed importem; i (3) nie powinno to być zbyt trudne dla osób biegle posługujących się MySQL. Niestety, nie mam żadnej wiedzy na temat MySQL, więc wyjaśnienia "baby steps" byłyby niezwykle pomocne.
właśnie zrobiłem (przygotowanie przez import):
krokach 1, 2, 3: To zdjęcie przedstawia tabela strona zanim zmodyfikowane pole page_id klikając 'Zmień' i un-checking "Auto-inkrementacja" (w przygotowaniu do importu). Przeprowadziłem dokładnie te same zmiany w polu rev_id w tabeli rewizja i old_id w tabeli tekst ale pominięto te zrzuty ekranowe, aby uniknąć zwolnień.
Krok 4: To zdjęcie przedstawia indeksów dla tabeli stronie zanim rzuciłem je wszystkie.
Krok 5: To zdjęcie przedstawia indeksów dla tabeli rewizji zanim rzuciłem je wszystkie.
Krok 6: Ten obraz przedstawia indeksów dla tekstu stół zanim rzuciłem je wszystkie.
co muszę TERAZ (przywrócenie po przywozie):
po prostu trzeba przywrócić oryginalne indeksy i pola automatycznego przyrostu bez czekania sto lat.
Set-up szczegóły: PHP 5.3.8 (apache2handler), MySQL 5.5.16 (InnoDB), Apache 2.2.21, Ubuntu 12.04 LTS, MediaWiki 1.19.0 (prywatny wiki)
+1 za dobrze napisane pytanie, ale obawiam się, że przy zbiorach danych tej wielkości tworzenie indeksów potrwa chwilę, bez względu na to, jak to zrobisz. Jeśli był to MyISAM, mógłbyś uniknąć przedrzucenia indeksów przed importowaniem: w tabelach MyISAM możesz je wyłączyć i włączyć ponownie po zakończeniu importowania danych, w takim przypadku MySQL automatycznie naprawi indeks przez sortowanie. Ale nawet wtedy, sortowanie 40 g danych zajmie trochę czasu nawet w szybkim systemie. I używasz InnoDB, w którym to nie jest możliwość AFAIK. – Daan
Nie sądzę, że wyłączanie i włączanie jest szybsze niż tworzenie nowego indeksu. Zaczynasz od zera, sortuj dane i napisz indeks. – usr
Pamiętaj, że jestem kompletnym początkującym MySQL. Wiem, co zrobiłem, ale nie mam pojęcia, jak sortować, ponownie indeksować itd., Więc byłoby bardzo pomocne, gdybyś wyjaśnił kod. Jeśli okaże się, że wyłączenie i aktywacja za pomocą MyISAM spowodowało ponowne indeksowanie drastycznie szybsze, zawsze mogłem odbudować wszystko od zera - robiłem to już wiele razy, mogłem z łatwością zrobić to ponownie za około 5 godzin. Najważniejsze jest to, że prawie nic nie wiem na temat MySQL, więc proszę o podanie konkretnych i dostarczenie przykładów kodu, jeśli to możliwe. –