MyISAM vs. InnoDB – melyik a gyorsabb?

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:

  1. akkor ha egy táblából csak olvasunk, írások nélkül.
  2. 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.

4 hozzászólás

"Precízebben: az InnoDB sor

"Precízebben: az InnoDB sor szintű lock-ot használ, az InnoDB tábla szintű lock-ot." - ez a sor javításra szorul.

egyébként köszi!