A MySQL esetében nehéz lenne megérteni a MyISAM és az InnoDB működését, amelyek a legismertebb és legszélesebb körben használt MySQL tárolómotorok közé tartoznak. Ma arról fogok beszélni, mi a különbség a MyISAM és az InnoDB között a MySQL-ben...
Mi az a MyISAM?
A MyISAM a MySQL relációs adatbázis-kezelő rendszer alapértelmezett tárolómotorja (5.5 előtt)。 Ez a MySQL táblatároló struktúra sok hasznos funkciót kibővít a régi ISAM kódból. Az új MySQL verzióban az InnoDB motor széles körben helyettesíti a MyISAM-et a tranzakciók, a referenciális integritás és a magasabb egyidejű képesség előnyei miatt. Minden MyISAM tábla három fájlnak felel meg a merevlemezen. Mindhárom fájl ugyanazzal a fájlnévjellel, de eltérő kiterjesztésekkel jelölik a típus célját: a .frm fájl tartalmazza a tábla definícióját, de ez a fájl nem a MyISAM motor része, hanem a szerver része; a .MYD tartalmazza a tábla adatait; .MYI a tábla indexfájlja.
Mi az az InnoDB?
Az InnoDB egy másik MySQL tárolómotor és a MySQL AB által kiadott szabvány új verziója minden bináris telepítési csomagban benne található.5.5-től kezdve alapértelmezett tárolómotorként。 Előnyei más tárolómotorokkal szemben a ACID-kompatibilis tranzakciók támogatása (hasonlóan a PostgreSQL-hez) és a paraméterintegritás (azaz idegen kulcsok támogatása).
Az Oracle Corporation 2005 októberében felvásárolta az Innobase-t. Az Innobase kettős hitelesítési engedélyezést használ. A GNU segítségével terjesztik, és lehetővé teszi más csoportok számára, akik szeretnék beépíteni az InnoDB-t kereskedelmi szoftverekbe, hogy licencet szerezzenek.
A legnépszerűbb tárolómotorok a MyISAM és az InnoDB. A MyISAM és az InnoDB közötti fő különbségek a teljesítmény és a tranzakciós vezérlés. A MyISAM az ISAM korai kibővített megvalósítása (Indexed Sequential Access Method, az ISAM már nem támogatott a MySQL 5.0 után), az ISAM olyan helyzeteket kezel, ahol az olvasási frekvencia sokkal nagyobb, mint az írási frekvencia, így az ISAM és későbbi MyISAM nem veszi figyelembe a támogatást, kizárja a TPM-et, nincs szükség tranzakciós rekordokra, az ISAM lekérdezések hatékonysága jelentős, és a memóriafogyasztás nagyon kicsi. A MyISAM ezeket az előnyöket örökli, miközben lépést tart a korszakra, számos hasznos új funkciót és kapcsolódó eszközt. Például az egyidejű vezérlést figyelembe véve táblázatszintű zárolásokat biztosítanak, és bár a MyISAM maga nem támogatja hibatűrést, használható a myisamchk segítségével a hibák helyreállítására. Mivel a MyISAM minden táblához saját független tárolófájlokat (MYD adatfájl és MYI index fájl) használ, nagyon kényelmes a mentés és visszaállítás (a másolás felülírása elegendő), és támogatja az online helyreállítást is. Más tárolómotorokhoz képest a MyISAM a legtöbb eszközt kínálja az asztalok ellenőrzésére és javítására. A MyISAM táblák tömöríthetők, és támogatják a teljes szöveges keresést. Nem tranzakcióbiztosak, és nem támogatják az idegen kulcsokat, szóval ha az alkalmazásod nem igényel tranzakciókat, és csak alapvető CRUD műveleteket kezel, akkor a MyISAM a legjobb választás. Az InnoDB magas egyidejű olvasási és írási helyzetekre lett tervezve, MVCC-t (Multi-Version Concurrency Control) és sorszintű zárolásokat használva az ACID-kompatibilis tranzakció támogatására. Az InnoDB támogatja az idegen kulcs referencia integritását, és hibakeresési képességekkel rendelkezik. Ezen felül az InnoDB teljesítménye hivatalosan is elég jó, különösen nagy mennyiségű adatfeldolgozás esetén: az InnoDB CPU hatékonysága összehasonlíthatatlan más lemezalapú relációs adatbázis-tároló motorokkal. Azonban az InnoDB mentése és helyreállítása kissé problémásabb, hacsak nem használjuk a 4.1-es vagy újabb verzió Mulit-tablespace támogatását, mert ellentétben a MyISAM-m-m-nal, az InnoDB adatfájljai nem felelnek meg egymásnak az egyes táblákhoz külön-külön. Ehelyett a megosztott táblázatteret használják, és az egyszerű másolási felülírási módszer nem alkalmas számára, így az adatokat a MYSQL leállítása után vissza kell állítani. Táblázatonkénti táblázattér használatával minden tábla külön táblatér fájlnak felel meg, így a helyzet sokkal egyszerűbb. Ugyanazokkal a jellemzőkkel rendelkezik, mint a BDB típusok, és külföldi billentyűket is támogatnak. Az InnoDB táblák gyorsak és gazdagabb funkciókkal rendelkeznek, mint a BDB, ezért ajánlott, ha tranzakciós biztonságú tárolómotorra van szükséged.
Általánosságban az InnoDB jó választás, ha tranzakciós támogatásra van szükség, és magas párhuzamos olvasási és írási frekvenciával rendelkezik. A BDB akkor is felmerülhet, ha az egyidejű olvasások és írások gyakorisága nem magas, de a BDB többé nem lesz támogatott a MySQL 5.1 és későbbi verziókban. Ez az opció eltűnt
Alapértelmezés szerint az InnoDB tranzakciók nyitva vannak (automatikus commit = 0), ami azt jelenti, hogy minden rekord behelyezése után az InnoDB tábla külön tranzakcióként kezeli. Ha tehát 10 000 rekordot adunk be, és nem zárjuk le a tranzakciót, akkor az InnoDB típusú tábla 10 000 tranzakcióként kezeli, és a teljes behelyezési idő ekkor nagy lesz, először ki kell kapcsolnunk a tranzakciót, majd beilleszteni, így a sebesség nagyon gyors lesz. A Heap és a BDB (Berkeley DB) esetében viszonylag az áthatolási arány nem olyan jó, mint az előző kettőben, de bizonyos esetekben, A Heap tárolómotor továbbra is nagyon alkalmazható, amely adatokat tárol a memóriában, és rendkívül gyors, mert nincs lemez I/O várakozni. De mivel ez egy memóriatároló motor, a szerver újraindítása után minden módosítás eltűnik. A Heap remek hely a BDB tesztelésére, mivel ez a MySQL első tranzakciós biztonságos tárolómotorja. A Berkeley DB adatbázis-könyvtárán alapul, tranzakciós szempontból is biztonságos, de a BDB nyilvánvalóan nem olyan népszerű, mint az InnoDB, mert a MySQL-ben a tranzakciókat támogató tárolómotor többsége MVCC vagy sorszintű zároló tárolómotorokat keres, míg a BDB csak oldalszintű zárolást támogat.
InnoDB motor
Az InnoDB egy tranzakciós tárolómotor, amely támogatja a visszagörcseléseket, és nagy teljesítményű szolgáltatásokat nyújt nagy mennyiségű adatfeldolgozás esetén, valamint futás közben puffermedenceket hoz létre a memóriában az adatok és indexek pufferezésére.
Az InnoDB motor előnyei:
1. A tranzakciófeldolgozás és ACID tranzakciós funkciók támogatása;
2. Az SQL szabvány négy izolációs szintjét valósítják meg;
3. Támogassa sorszintű zárolási és idegen kulcskorlátokat;
4. Tranzakciónaplókat használhatsz adatmentéshez.
5. A zárolási szint sorzár, amely alkalmas gyakori táblázatmódosításra magas egyidejű egyidejű megoldással, és a magas egyidejű szint jobb, mint a MyISAM. Hátránya, hogy a rendszer fogyasztása nagy.
6. Az index nemcsak önmagát gyorsalogázza, hanem adatokat is gyorsított, ami több memóriát igényel, mint a MyISAM.
InnoDB motor hátrányai:
Mivel nem menti el a táblázat sorainak számát, a COUNT statisztikák használata esetén az egész táblázatot átvizsgálják.
MyISAM motor
A MyISAM az alapértelmezett motor a MySQL 5.5.5 előtt, és gyors olvasásra tervezték.
MyISAM motor előnyei:
1. Magas teljesítményű olvasás;
2. Mivel elmenti a táblázat sorainak számát, a teljes táblázatot nem fogják beolvasni COUNT statisztikák használatakor;
A MyISAM motor hátrányai:
1. A zsilip szintje asztalzár, és az őrzár előnye, hogy a felső rész kicsi, a zsilip pedig gyors; Hátránya, hogy a zár granularitása nagy, a zár impulzusának valószínűsége magas, és az egyidejű kapacitás alacsony, ami alkalmas lekérdezésalapú szolgáltatásokhoz.
2. Ez a motor nem támogatja a tranzakciókat vagy a külföldi kulcsokat.
3. INSERT és UPDATE műveleteknek az egész táblát le kell zárniuk;
4. A táblázatban lévő sorok számát tárolja, így amikor SELECT COUNT(*) FROM TABLE fájlokat, akkor csak közvetlenül a mentett értékeket kell olvasnia anélkül, hogy az egész táblát átvizsgálná.
Alkalmazható forgatókönyvek
A MyISAM alkalmas a következőkre: (1) sok számszámításra; (2) ritka behelyezés és nagyon gyakori lekérdezések; (3) Nincs üzlet.
Az InnoDB alkalmas a következőkre: (1) magas megbízhatósági követelményekre vagy tranzakciókra; (2) A táblázatfrissítések és lekérdezések meglehetősen gyakoriak, és a táblazárolás esélye viszonylag magas.
Táblázat összehasonlítása
| Tulajdonságok | MyISAM | Felhalom | BDB | InnoDB | | Tranzakciók | Nem támogatott | Nem támogatott | Támogatója valakinek | Támogatója valakinek | | Zárgranularitás | Asztalzár | Asztalzár | Oldalzár (oldal, 8KB) | Zár | | raktározás | Fájlosztás | Emlékezetben | Egy fájl egy táblázatonként | Táblázattér | | Izolációs szint | nem | nem | Elkötelezett olvasás | Mind | | Hordozható formátum | van | Nincs | nem | van | | Hivatkozás teljessége | nem | nem | nem | van | | Adat elsődleges kulcs | nem | nem | van | van | | MySQL caches adatrekordokat | nem | Igen | Igen | Igen | | Használhatóság | Teljes verzió | Teljes verzió | MySQL-Max | Teljes verzió |
Néhány részletbeli különbség
1. Az InnoDB nem támogatja a FULLTEXT típusú indexeket, amelyeket a MySQL 5.6 (kísérleti) óta támogatnak.
2. Az InnoDB nem menti el a táblázat konkrét sorszámát, vagyis amikor a select count() a táblából végrehajtja az InnoDB-t, az egész táblát be kell szkennelnie, hogy kiszámolja, hány sor van, de a MyISAM csak a mentett sorok számát kell felolvasnia. Fontos megjegyezni, hogy ha a count() állítás tartalmazza a where feltételt, akkor a művelet mindkét táblára ugyanaz.
3. AUTO_INCREMENT típusú mezők esetén az InnoDB-nek tartalmaznia kell egy indexet, amely csak az adott mezőt tartalmazza, de a MyISAM táblában létrehozhatsz közös indexet más mezőkkel.
4. Amikor TÖRÖLJÜK FROM FROM táblát, az InnoDB nem hozza létre újra, hanem soronként törli.
5. A LOAD TABLE FROM MASTER művelet nem működik az InnoDB-nél, a megoldás az, hogy először az InnoDB táblát MyISAM táblára cseréljük, az adatokat importáljuk, majd átalakítjuk az InnoDB táblára, de ez nem alkalmazható arra a táblára, amely további InnoDB funkciókat (például idegen kulcsokat) használ.
6. Ezen felül az InnoDB tábla sorzárolása nem abszolút, ha a MySQL nem tudja meghatározni a szkennelendő tartományt SQL utasítás végrehajtásakor, az InnoDB tábla is az egész táblát rögzíti.
7. Az InnoDB nem támogatja a teljes szöveges indexelést, míg a MyISAM igen. A teljes szöveges indexelés azt jelenti, hogy minden szó esetében fordított sorrendben (char, varchar és szöveg) létrehoznak (kivéve a stop szavakat). A MyISAM teljes szöveges indexe valójában haszontalan, mert nem támogatja a kínai szószegmentálást, és a felhasználónak a szószegmentálás után az adattáblába kell írnia, és a 4 mint 4 kínai karakterrel rendelkező szavakat figyelmen kívül hagyják, mint például a stop szavakat.
|