Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 13183|Válasz: 0

[Forrás] A MyISAM a különbség a MySQL adatbázis-tárolómotor és az InnoDB között

[Linket másol]
Közzétéve 2020. 04. 13. 9:53:49 | | |
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ágokMyISAMFelhalomBDBInnoDB
TranzakciókNem támogatottNem támogatottTámogatója valakinekTámogatója valakinek
ZárgranularitásAsztalzárAsztalzárOldalzár (oldal, 8KB)Zár
raktározásFájlosztásEmlékezetbenEgy fájl egy táblázatonkéntTáblázattér
Izolációs szintnemnemElkötelezett olvasásMind
Hordozható formátumvanNincsnemvan
Hivatkozás teljességenemnemnemvan
Adat elsődleges kulcsnemnemvanvan
MySQL caches adatrekordokatnemIgenIgenIgen
HasználhatóságTeljes verzióTeljes verzióMySQL-MaxTeljes 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.





Előző:Kísérleti kérdések összeállítása
Következő:SQL utasítás to Varchar type
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com