Legalább egymilliószor feltették már a kérdést, hogy MySQL adabzáis szerver esetén melyik tábla típus a gyorsabb, az InnoDB vagy a MyISAM. És legalább kétmilliószor megválaszolták már. Most én is meg válaszolom.
Műveletek
MyISAM alatt 1 db. SELECT lefuttatása mindig gyorsabb.
MyISAM alatt 1 db. INSERT lefuttatása mindig gyorsabb.
MyISAM alatt 1 db. UPDATE lefuttatása mindig gyorsabb.
MyISAM alatt 1 db. DELETE lefuttatása mindig gyorsabb.
Ugyanez igaz 1.000.000 SELECT-re vagy 1.000.000.000 SELECT-re, de INSERT-re UPDATE-re és DELETE-re is. Ha egyforma utasításokról beszélünk.
Miért? Mert nincsenek tranzakciók.
Valódi alkalmazások
Ha felváltva jönnek az olvasás (SELECT) és az írás (INSERT/UPDATE/DELETE) műveletek, akkor az InnoDB a gyorsabb.
Miért? Mert a MyISAM esetén senki nem tudja olvasni vagy írni a táblát, ha egyvalaki írja.
Egy INSERT és egy SELECT feltartja egymást MyISAM esetén. InnoDB esetén nem, ott egyszerre futnak.
Precízebben: az InnoDB sor szintű lock-ot használ, az MyISAM tábla szintű lock-ot.
Konklúzió
Az InnoDB valódi alkalmazások esetében mindig gyorsabb. Szinte kivétel nélkül. Két ritka kivétel van, amikor a MyISAM gyorsabb lehet:
- akkor ha egy táblából csak olvasunk, írások nélkül.
- akkor ha egy táblába csak írunk, de nem olvassuk ki.
Az első eset előfordulhat, de általában csak kevés rekordot tartalmazó táblákkal. Szerintem nagyon ritka az az eset, hogy csak olvassuk a táblát és nagyon sok rekord van benne. A második esetet gyakorlatilag kizárhatjuk, minek írnánk egy táblába, ha nem olvassuk.
Egy szó mint száz, valódi alkalmazások esetén az InnoDB-t tábla típust csak nagyon ritkán veri meg a MyISAM sebesség tekintetében.