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:
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.
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:
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.
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.
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.