InnoDB vs. MyISAM

img

MyISAM vagy InnoDB? Felmerült-e már valakiben a kérdés, hogy melyiket, mire és hogyan használja?Bennem igen :) emiatt kicsit utána is lestem hogy mi is az alapvető különbség, melyiket preferálják és melyiket ajánlják tárhelyszolgáltatók vagy akár külföldi fejlesztők.

Tehát okosodjunk:

- MyISAM -

A MyISAM-ot a MySQL-hez fejlesztették kifejezetten (jééé télleg még a nevében is benne van). Nah tehát ennek a tárolási módszernek 3 file van fenntartva.

  1. a tábla formátumának
  2. az adatoknak
  3. indexeknek

A MyISAM egyik előnyeként a fulltext index támogatását említik mindenhol. Tehát ha fulltextes keresést csinálsz érdemes MyISAM-ra váltani.

Néhány főbb paramétere:

  • maximum sorainak száma táblánként ~4.295E+09
  • táblánként 64 indexet is képes tárolni
  • és a már említett text/blob mezők full indexelhetők, ezáltal pl kereső funkciókban jól alkalmazható

- InnoDB -

Az InnoDB kicsivel fiatalabb téma mint a MyISAM, így akiknek a rendszere tökéletesen fut MyISAM alatt, lehet nehezebben döntenek InnoDB mellett. A MyISAM-mal ellentétben nem teljes táblát zárol, hanem csak sorokat. Ezáltal míg az egyik soron update vagy insert folyik, addig egy másik query tud updatelni egy másik sort. Ebben nagyban eltér a MyISAM működési elvétől. Ezzel jobban támogatja a multi-usereket és a teljesítmény is nagyban nő.

Másik előnyként sorolják a nagy-terhelésű adatbázisoknál való alkalmazhatóságát. Jól elvan nagyobb rendszerekben is a feljebb említett sor-zárolás miatt.

CPU hatékonysága nem nagyon hasonlítható más lemez-alapú adatbázis rendszerhez.

- Összegezve -

A MyISAM a legtöbb esetben sokkal hatékonyabb mint az InnoDB. Normál használat mellett a SELECT, INSERT és UPDATE jóval gyorsabb MyISAM-mal. Azok a MySQL fejlesztők választják, akiknek az integritás, a megbízhatóság és a teljesítmény a fontos.

Ezzel szemben az InnoDB kiemelkedik a 3 fő funkciójával, az sor-zárolással, a tranzakció-biztos lekérdezésekkel és a kapcsolódó adatszerkezettel. Főleg logok tárolására és keresőmotor típusú műveletekre van kifejlesztve.

Az InnoDB képes a teljes összeomlás vagy nem megfelelő leállás esetés is felállni, a logjainak köszönhetően. A MyISAM pedig képes javítani vagy helyreállítani a nem megfelelően letárolt indexeket, táblákat, melyek lemezre-íráskor nem jól tárolódtak el.

- Tehát akkor melyiket használjuk? -

Ha többször INSERT-elsz, UPDATE-elsz, DELETE-elsz, mint SELECT-elsz: InnoDB

Ha full-text keresést szeretnél: MyISAM

Ha preferálod vagy szükséges a kapcsolt tábla: InnoDB

Ha kevés a HDD vagy a RAM: MyISAM

Ha kétségeid vannak: MyISAM

Tehát nincs abszolút nyertes.

Felmerülhet a kérdés, hogy a két motor keverhető-e. Igen vannak esetek, melyek szükségessé teszik vagy megkövetelik, hogy egyszerre alkalmazd a kettőt. DE ha esetlegesen teljesítmény gondjaid akadnak, akkor természetesen egyiket konvertálni kell másikba. És le kell tesztelni így is. Ilyen esetekben meg kell találni a megfelelő módszert.