MyISAM vs InnoDB

1

MyISAM vs InnoDB

Podczas pierwszych etapów pisania aplikacji opartej o MySQL możemy zmierzyć się z dylematem: jaki mechanizm składowania danych użyć dla poszczególnych tabel? Postaram się w poniższym wpisie przybliżyć i porównać dwa, z powszechnie stosowanych – MyISAM oraz InnoDB.

MyISAM

MyISAM jest mechanizmem składowania danych, zaprojektowany z myślą o pobieraniu i dodawaniu danych. Dzięki temu, że każda krotka wskazuje na rekord w pliku i wskaźnik do niej jest przesuwany względem jego początku, wprowadzanie nowych danych jest bardzo wydajne (nowy rekord jest dodawany na sam koniec pliku).

Uaktualnianie danych, jak i usuwanie, jest dużo bardziej problematyczne z natury mechanizmu, dzięki któremu odczyt jest tak wydajny tj. podczas usuwania krotki wszystkie wskaźniki „za” danym rekordem muszą zostać zaktualizowane. Tak samo podczas aktualizacji rekordu – gdyż jego efektem przeważnie jest zmiana wielkości.

InnoDB

Mechanizm składowania danych jakim jest InnoDB jest dużo bardziej skomplikowany i mógłby być materiałem na kolejny wpis – dlatego, też przedstawię tylko jego rewolucyjne względem MyISAM właściwości.

Pierwszym, bez wątpienia bardzo istotnym usprawnieniem, jest możliwość stosowania kluczy obcych w tabelach, zapewniających integralność między tabelami, co w połączniu z utworzeniem indeksu dla danego klucza usprawnia wydajność tabeli.

Drugim rewolucyjnym usprawnieniem względem MyISAM jest możliwość korzystania z transakcji – umożliwia to wydzielenie całości ze zbioru operacji na bazie danych, dzięki czemu, w razie niepowodzenia którejkolwiek z danych operacji, mamy możliwość odwrócenia zmian.

MyISAM vs InnoDB

Poniżej załączam zestawienie cech wyżej przedstawionych silników:

1

Podsumowanie

Przy podejmowaniu decyzji podczas zakładania tabeli warto dokładnie przeanalizować zadania, jakie nasza tabela ma spełniać, dzięki temu, być może w przyszłości zaoszczędzimy trochę czasu na optymalizacji (a raczej na jej braku).

Autorem tekstu jest Michał Gaj.

Zobacz również artykuły o podobnej tematyce

B2E, czyli skuteczne wsparcie organizacji pracy
B2E banner

Jak sprawić, by organizacja efektywnie funkcjonowała na współczesnym rynku? Każdy kto prowadzi firmę wie, że kwestia ta potrafi spędzać sen...

Aplikacja mobilna brakującym ogniwem omnichannel?
aplikacja mobilna

W 2018 r. strategia omnichannel wydaje się standardem. Wszystkie liczące się marki posiadające sieć sklepów stacjonarnych połączyły w większym lub...

Czy człowiek może być kolorem? Kapitał ludzki, jako największa wartość w organizacji
ludzie-1

Chcąc prowadzić innowacyjną i ponadczasową firmę należy bacznie obserwować indywidualne predyspozycje pracowników. Nie każdy z nich nadaje się do pracy...

Zobacz więcej wpisów
  • http://oferownik.pl Robert Marketingowiec

    Nie da się być mocnym we wszystkich kanałach komunikacji, trzeba sobie wypracować te które najbardziej się wybijają i się ich trzymać.

  • Marcin

    „Dawno temu skupialiśmy się na ważnych rzeczach, czyli rozwiązywaniu problemów i logice biznesowej. Dzisiaj jesteśmy prawie całkowicie skoncentrowani na abstrakcji i generalizacji.” – i to wszystko wina frameworków? Czy to wina cegieł i zaprawy że murarze krzywo wybudowali mur, czy jednak problemem było nieprofesjonalne podejście fachowców, którzy ubzdryngoleni przyszli do pracy? Nie możemy zrzucać winy na narzędzia, za to że źle tworzymy aplikacje. Powinniśmy raczej starać się dostrzec fakt, że problem leży w nas samych i spróbować go zrozumieć… oraz coś z nim zrobić. I na pewno nie jest metodą na ów problem podejście, że „powinniśmy używać PHP, a nie architektury do budowania aplikacji” – taki tok rozumowania jest idealnym dowodem na to jak wiele osób nie rozumie czym jest architektura. Architektura to nie framework! Posłużę się kolejnym odwołaniem do budownictwa: czy patrząc na kościół pierwsze co widzimy to to, z czego jest on zbudowany czy raczej jakie jest jego przeznaczenie. Albo: czy widząc bramę pierwszą naszą myślą jest „użyli cegieł z Castoramy i wkrętarki boscha” czy raczej „to jest brama – służy do tego by gdzieś wejść lub skądś wyjść”?
    To prawda – we współczesnym programowaniu zapominamy o logice biznesowej, ale nie jest to wina architektury, tylko raczej braku dyscypliny w nas samych – nie interesuje nas to, nas jara głównie fakt że piszemy np. w kotlinie bo to jest teraz modne. „Zrobię to na symfony, zapytania puszczę doctrinem a obiekty będę serializować jms’em” – to nie jest opis architektury, to lista zakupów – jakich narzędzi potrzebuję by zrealizować cel. Szkoda tylko, że przez to cel ląduje na drugim (albo i nawet dziesiątym) miejscu – a celem jest np. zbudowanie aplikacji do przechowywania dokumentów. Ale to nie decyzja twórców bibliotek/frameworków, że cel staje się dla nas mało istotny. To nie Fabien Potencier każe nam całą logikę wrzucać do akcji w kontrolerze, to nie Jonathan Wage podpowiada nam, by nasze biznesowe obiekty bezpośrednio wywoływały doctrine’a! To my, my programiści sami doprowadzamy do tego, że nasze aplikacje przypominają niestrawione resztki pokarmu które codziennie zostawiamy w porcelanowym ekspresie. I póki nie nauczymy się odseparowywać logiki biznesowej od narzędzi to dalej będziemy tworzyć legacy code.
    Co do argumentu, że niektóre z zależności mogą zostać po kilku latach porzucone i nie będą dalej rozwijane… serio? I proponujesz phpti jako alternatywę do twiga albo smarty? Wszystko może zostać po kilku latach porzucone, to do obowiązków programisty należy m.in. nie pozwolić na to, by moduły/komponenty nie były sprzężone z innymi elementami czy zewnętrznymi bibliotekami.
    A co do bogactwa wiedzy i tego co się dzieje pod maską – ogólnie nie powinno się używać narzędzi, których się nie rozumie: jak działają, dlaczego tak działają itp. By potem nie było sytuacji w stylu senior piszący od 5 lat w laravelu nie potrafi odpowiedzieć na rozmowie kwalifikacyjnej na pytanie „Co robi funkcja die()?”…

    TL;DR: nie zgadzam się 😉