Poniższe ćwiczenie pochodzi z książki „ High Performance MySQL, Second Edition ”.
To doskonała książka i polecam ją każdemu.
Krótka odpowiedź brzmi:
Biorąc pod uwagę rozmiar i warunki stołu, bez względu na wybraną metodę, myślę, że potencjalnie czeka Cię długie oczekiwanie.
Tabela konwersji
Istnieje kilka sposobów konwersji tabeli z jednego silnika pamięci na inny, każdy z zaletami i wadami.
ZMIEŃ TABELĘ
mysql> ALTER TABLE mytable ENGINE = Falcon;
Ta składnia działa dla wszystkich silników pamięci masowej, ale jest pewien haczyk: może to zająć dużo czasu. MySQL wykona kopię starej tabeli wiersz po wierszu do nowej tabeli. W tym czasie prawdopodobnie wykorzystasz całą pojemność dyskową we / wy serwera, a oryginalna tabela zostanie zablokowana podczas odczytu.
Zrzut i import
Aby uzyskać większą kontrolę nad procesem konwersji, możesz najpierw zrzucić tabelę do pliku tekstowego za pomocą narzędzia mysqldump. Po zrzuceniu tabeli możesz po prostu edytować plik zrzutu, aby dostosować zawartą w nim instrukcję CREATE TABLE. Pamiętaj, aby zmienić nazwę tabeli oraz jej typ, ponieważ nie możesz mieć dwóch tabel o tej samej nazwie w tej samej bazie danych, nawet jeśli są one różnych typów - a mysqldump domyślnie zapisuje komendę DROP TABLE przed CREATE TABLE , więc możesz stracić swoje dane, jeśli nie będziesz ostrożny!
UTWÓRZ i WYBIERZ
Trzecia technika konwersji to kompromis między prędkością pierwszego mechanizmu a bezpieczeństwem drugiego. Zamiast zrzucić całą tabelę lub przekonwertować ją na raz, utwórz nową tabelę i użyj składni INSERT ... SELECT MySQL, aby wypełnić ją w następujący sposób:
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
Działa to dobrze, jeśli nie masz dużo danych, ale jeśli tak, to często bardziej wydajne jest wypełnianie tabeli przyrostowo, zatwierdzanie transakcji między poszczególnymi porcjami, aby dzienniki cofania nie rosły. Zakładając, że id jest kluczem podstawowym, uruchom tę kwerendę wielokrotnie (używając każdorazowo większych wartości xiy), aż skopiujesz wszystkie dane do nowej tabeli:
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;
Po wykonaniu tej czynności pozostanie oryginalny stół, który możesz upuścić, gdy skończysz, i nowy stół, który jest teraz w pełni wypełniony. Zachowaj ostrożność, aby zablokować oryginalną tabelę, jeśli to konieczne, aby uniknąć niespójnej kopii danych!