Katalog artykułów
Silnik bazy danych tabeli bazy danych jest jak silnik samochodu; wymiana silnika natychmiast zmienia wydajność i charakterystykę. Wiele osób uważa, że baza danych służy wyłącznie do przechowywania danych, ale kiedy spróbujesz przekonwertować InnoDB na MyISAM , odkryjesz ukryte zawiłości.
Dlaczego ktoś miałby chcieć przejść z InnoDB na MyISAM?
W wielu scenariuszach MyISAM jest szybszy, zwłaszcza w przypadku aplikacji wymagających dużej ilości odczytu i małej ilości zapisu, takich jak bazy danych dzienników i statystyk.
Mechanizm blokowania na poziomie tabeli działa bardzo płynnie przy niskim poziomie współbieżności.
Co więcej, przechowywanie plików w MyISAM jest bardziej intuicyjne; .MYD Przechowuj dane, jeden .MYI Przechowywanie indeksów, migrowanie i tworzenie kopii zapasowych są bardzo wygodne.
Jednak obsługa transakcji i kluczy obcych w InnoDB jest niemal koniecznością w złożonych scenariuszach biznesowych.
Dlatego przed dokonaniem przejścia musisz ustalić, czy Twoja firma faktycznie potrzebuje tych funkcji.
Polecenie główne: ALTER TABLE
Aby przekonwertować pojedynczą tabelę z InnoDB do MyISAM, potrzebujesz tylko jednej linijki kodu:
ALTER TABLE `你的表名` ENGINE = MyISAM;
Po zakończeniu wykonywania polecenie zostanie przełączone w celu przechowywania tabeli.
Czy to nie jest proste?
Konwersja wsadowa: automatyczne generowanie skryptów
Jeśli masz dziesiątki, a nawet setki tabel, ręczna modyfikacja ich zdecydowanie nie jest praktyczna.
W tym momencie można użyć pojedynczego zapytania, aby automatycznie wygenerować polecenia konwersji wsadowej:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
Po uruchomieniu wyświetli szereg... ALTER TABLE ... Oświadczenie.
Skopiuj te polecenia i wykonaj je wszystkie naraz, aby ukończyć konwersję wsadową za jednym razem.
Zjawisko to nazywa się „automatyczną konwersją wsadową”.
Ocena ryzyka przed konwersją

Ograniczenia klucza obcego
InnoDB obsługuje klucze obce, natomiast MyISAM nie obsługuje ich wcale.
Po konwersji ograniczenia klucza obcego zostaną bezpośrednio odrzucone.
Jeśli w Twojej firmie stosuje się kaskadowe usuwanie lub aktualizowanie, po konwersji cała logika całkowicie zawiedzie.
Wsparcie transakcji
InnoDB zawiera transakcje i je obsługuje. COMMIT I ROLLBACK.
MyISAM nie zawiera transakcji, jedynie blokady na poziomie tabeli.
Po konwersji cały kod związany z transakcją stanie się nieważny, a w przypadku wystąpienia wyjątku wycofanie go będzie niemożliwe.
Wydajność współbieżności
InnoDB korzysta z blokowania na poziomie wiersza, natomiast MyISAM korzysta z blokowania na poziomie tabeli.
W scenariuszach o wysokiej współbieżności MyISAM często blokuje tabele, co prowadzi do wąskich gardeł wydajnościowych.
Funkcje indeksu
Przed wersją MySQL 5.6 baza danych MyISAM miała unikalny indeks pełnotekstowy.
Jednakże w MySQL 5.6+ i MariaDB 10+ InnoDB obsługuje już indeksowanie pełnotekstowe.
Dlatego też, o ile nie używasz starszej wersji, nie ma potrzeby przełączania się na MyISAM w celu indeksowania pełnotekstowego.
Proces najlepszych praktyk
Kopia zapasowa danych Przed konwersją należy pamiętać o wyeksportowaniu.
.sqlPliki są przechowywane w sposób umożliwiający ich przywrócenie w dowolnym momencie.Sprawdź strukturę tabeli za pomocą następującego polecenia, aby zobaczyć, czy występują w niej klucze obce:
SHOW CREATE TABLE `你的表名`;Wykonaj konwersję 使用
ALTER TABLEAlternatywnie, do dokończenia konwersji można użyć skryptów wsadowych.Sprawdź stan zdrowia . Po konwersji uruchom:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;Potwierdza to, że tabela działa prawidłowo i uwalnia fragmenty.
Metoda odzyskiwania odwrotnego
Jeśli po konwersji zauważysz spadek wydajności lub problemy z logiką biznesową, możesz w dowolnym momencie powrócić do InnoDB:
ALTER TABLE `你的表名` ENGINE = InnoDB;
To jest to, co nazywamy „operacją odwracalną” i co daje ci wyjście.
Przytoczone autorytatywne punkty widzenia
Zgodnie z oficjalną dokumentacją MySQL :
„Konstrukcja klucza obcego”aints są obsługiwane tylko przez InnoDB. Jeśli przekonwertujesz tabelę na MyISAM, wszystkie klucze obce zostaną zignorowane.
——Podręcznik MySQL, rozdział 14.6.6 Ograniczenia klucza obcego
To oświadczenie wyraźnie mówi nam, że klucze obce są całkowicie nieprawidłowe w systemie MyISAM.
Oficjalna dokumentacja MariaDB podkreśla również:
„MyISAM nie obsługuje transakcji. Aplikacje wymagające integralności transakcji nie powinny używać MyISAM.”
——Baza wiedzy MariaDB, Silniki pamięci masowej
Dlatego musisz się dwa razy zastanowić zanim podejmiesz decyzję o zmianie.
Mój punkt widzenia i wnioski
Konwersja InnoDB do MyISAM przypomina wymianę silnika luksusowego samochodu na silnik ciężarówki.
Może działać, ale działa w zupełnie inny sposób.
Jeśli w Twojej firmie stosuje się proste zapytania statystyczne, szybkość i prostota rozwiązania MyISAM może okazać się bardziej odpowiednia.
Jeśli jednak Twój system opiera się na transakcjach i kluczach obcych, pochopna ich konwersja przypomina usunięcie poduszki powietrznej.
Dlatego prawdziwa mądrość nie leży w ślepym dążeniu do szybkości, ale w znalezieniu równowagi między stabilnością i wydajnością.
Wybór bazy danych decyduje o istocie systemu.
Opanowanie umiejętności przełączania silników pamięci masowej to nie tylko dowód kompetencji technicznych, ale także rozwinięcie myślenia architektonicznego.
Jeśli rozważasz przejście na produkcję masową, przeprowadź najpierw kompleksową ocenę ryzyka.
Uruchom środowisko testowe jeden raz, aby symulować rzeczywiste scenariusze biznesowe.
Po potwierdzeniu, że wszystko jest poprawne, wykonaj polecenie w środowisku produkcyjnym.
Bazy danych nie są zabawką. Stanowią serce danych przedsiębiorstwa.
A ty jesteś tym, który kontroluje rytm swojego serca.
Mamy nadzieję, że artykuł „Jak wsadowo konwertować tabele InnoDB do tabel MyISAM w bazach danych MySQL/MariaDB?” udostępniony na blogu Chen Weiliang ( https://www.chenweiliang.com/ ) będzie dla Ciebie pomocny.
Możesz udostępnić link do tego artykułu: https://www.chenweiliang.com/cwl-34157.html
