[MySQL] Jakie są różnice między MyISAM a InnoDB?
Jakiś czas temu, podczas projektowania aplikacji internetowej, zacząłem się zastanawiać - jakie są różnice pomiędzy MyISAM a InnoDB? Który mechanizm składowania danych wybrać, aby było wszystko ok? Tak powstał pomysł na ten artykuł. Postaram się w nim przybliżyć specyfikę obydwu systemów i spróbuję Ci wskazać ten lepszy.
Różnice w możliwościach i działaniu
- InnoDB jest nowszym rozwiązaniem niż MyISAM
- InnoDB jest bardziej rozbudowany a MyISAM jest prostszy
- InnoDB bardziej dba o integralność danych niż MyISAM
- InnoDB stosuje blokadę poszczególnych wierszy na czas edycji i aktualizacji danych w bazie, podczas gdy MyISAM stosuje blokadę całej tabeli (w skrócie - na czas operacji w InnoDB tylko wiersze są niedostępne, a w MyISAM cała tabela)
- InnoDB posiada system transakcyjny, a MyISAM nie
- InnoDB pozwala na korzystanie z kluczy obcych, a MyISAM nie
- InnoDB lepiej radzi sobie z odzyskiwaniem danych po ewentualnych crashach
- MyISAM ma pełnotekstowy indeks wyszukiwania
Zalety InnoDB
- InnoDB powinno być wykorzystywane wszędzie tam, gdzie integralność danych jest priorytetem
- Jest lepszy tam gdzie występuje duży nacisk na zapisywanie danych do bazy danych ze względu na blokowanie tylko wierszy a nie całej tabeli.
Wady InnoDB
- Z powodu większej dbałości o relacje między tabelami, administrator bazy danych oraz twórca bazy danych muszą więcej czasu przeznaczyć na projektowanie struktury takiej bazy oraz przepływu danych w niej zawartych.
- Wykorzystuje więcej zasobów systemowych do działania, takich jak pamięć RAM.
- Brak indeksowania pełnotekstowego
Zalety MyISAM
- Bazy danych w tym systemie są prostsze do zaprojektowania i stworzenia, w szczególności dla początkujących.
- Ogólnie, jest szybsza ze względu na swoją prostotę i nie zużywa tak wielu zasobów systemów tak jak InnoDB
- Posiada indeksowanie pełnotekstowe
- Ze względu na powyższe indeksy jest szczególnie efektywna gdy istnieje potrzeba intensywnego odczytywania danych z bazy danych
Wady MyISAM
- Brak sprawdzania integralności danych, co zwiększa liczbę problemów dla administratorów baz danych
- Brak wsparcia dla transakcji, które są szczególnie ważne takich systemach bazodanowych jak systemy dla banków, systemy dla korporacji, itp., itd.
- Wolniejsza od InnoDB w przypadku częstego zapisu danych do bazy danych i ich aktualizacji w bazie
Podsumowanie
Mam nadzieję, że udało mi się przybliżyć Tobie wady i zalety każdego z tych mechanizmów MySQL.
Jak widać, InnoDB jest przydatne w momencie gdy potrzebujemy aby nasze dane w bazie były jak najlepiej zabezpieczone przed błędami czy awariami, oraz w momencie gdy zależy nam na jak najszybszym zapisywaniu nowych danych do bazy.
Natomiast, MyISAM jest lepszy przy prostszych projektach takich jak zwykłe strony internetowe, gdzie w zasadzie dane są zapisywane w bazie od czasu do czasu, ale za to o wiele częściej są odczytywane z niej.
Wracając do mojego problemu z początku tekstu, to ja postanowiłem wymieszać InnoDB z MyISAM. To znaczy część tabel potraktowałem mechanizmem MyISAM, a część (mniejszą) mechanizmem InnoDB i wszystko pięknie działa.