chevron-left chevron-right

[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

  1. InnoDB jest nowszym rozwiązaniem niż MyISAM
  2. InnoDB jest bardziej rozbudowany a MyISAM jest prostszy
  3. InnoDB bardziej dba o integralność danych niż MyISAM
  4. 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)
  5. InnoDB posiada system transakcyjny, a MyISAM nie
  6. InnoDB pozwala na korzystanie z kluczy obcych, a MyISAM nie
  7. InnoDB lepiej radzi sobie z odzyskiwaniem danych po ewentualnych crashach
  8. MyISAM ma pełnotekstowy indeks wyszukiwania

Zalety InnoDB

  1. InnoDB powinno być wykorzystywane wszędzie tam, gdzie integralność danych jest priorytetem
  2. 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

  1. 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.
  2. Wykorzystuje więcej zasobów systemowych do działania, takich jak pamięć RAM.
  3. Brak indeksowania pełnotekstowego

Zalety MyISAM

  1. Bazy danych w tym systemie są prostsze do zaprojektowania i stworzenia, w szczególności dla początkujących.
  2. Ogólnie, jest szybsza ze względu na swoją prostotę i nie zużywa tak wielu zasobów systemów tak jak InnoDB
  3. Posiada indeksowanie pełnotekstowe
  4. Ze względu na powyższe indeksy jest szczególnie efektywna gdy istnieje potrzeba intensywnego odczytywania danych z bazy danych

Wady MyISAM

  1. Brak sprawdzania integralności danych, co zwiększa liczbę problemów dla administratorów baz danych
  2. Brak wsparcia dla transakcji, które są szczególnie ważne takich systemach bazodanowych jak systemy dla banków, systemy dla korporacji, itp., itd.
  3. 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.