Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 13183|Odpoveď: 0

[Zdroj] MyISAM je rozdiel medzi databázovým úložiskom MySQL a InnoDB

[Kopírovať odkaz]
Zverejnené 13. 4. 2020 9:53:49 | | |
Pokiaľ ide o MySQL, bolo by ťažké pochopiť MyISAM a InnoDB, ktoré patria medzi najznámejšie a najpoužívanejšie úložiská MySQL. Dnes vám porozprávam o rozdiele medzi MyISAM a InnoDB v MySQL...

Čo je MyISAM?

MyISAM je predvolený úložný engine pre relačný databázový systém MySQL (pred verziou 5.5)。 Táto štruktúra úložiska MySQL tabuliek rozširuje mnohé užitočné funkcie zo starého ISAM kódu. V novej verzii MySQL engine InnoDB vo veľkej miere nahrádza MyISAM vďaka svojim výhodám v oblasti transakcií, referenčnej integrity a vyššej súbežnosti.
Každá MyISAM tabuľka zodpovedá trom súborom na pevnom disku. Všetky tri súbory majú rovnaký názov súboru, ale rôzne prípony na označenie účelu typu: .frm súbor obsahuje definíciu tabuľky, ale tento súbor nie je súčasťou MyISAM enginu, ale je súčasťou servera; .MYD uchováva údaje tabuľky; .MYI je indexový súbor tabuľky.

Čo je InnoDB?

InnoDB je ďalší úložný engine pre MySQL a nová verzia štandardu vydaná spoločnosťou MySQL AB je zahrnutá vo všetkých binárnych inštalačných balíkoch.od 5.5 ako predvolený úložný engine。 Jeho výhodou oproti iným úložným enginom je podpora transakcií kompatibilných s ACID (podobne ako PostgreSQL) a integrita parametrov (t. j. podpora cudzích kľúčov).

Oracle Corporation získala Innobase v októbri 2005. Innobase používa autorizáciu s dvojitou autentifikáciou. Distribuuje sa pomocou GNU a umožňuje aj iným skupinám, ktoré chcú integrovať InnoDB do komerčného softvéru, získať licenciu.

Najpopulárnejšie úložné enginy sú MyISAM a InnoDB. Hlavné rozdiely medzi MyISAM a InnoDB sú vo výkone a kontrole transakcií. MyISAM je rozšírená implementácia skorého ISAM (Indexed Sequential Access Method, ISAM už nie je podporovaný po MySQL 5.0), ISAM je navrhnutý na situácie, kde je čítacia frekvencia oveľa vyššia ako frekvencia zápisu, takže ISAM a neskôr MyISAM neberú do úvahy podporu vecí, vylučujú TPM, nepotrebujú záznamy transakcií, efektivita ISAM dotazov je značná a spotreba pamäte je veľmi malá.
MyISAM tieto výhody zdedí a zároveň drží krok s dobou a prináša množstvo užitočných nových funkcií a súvisiacich nástrojov. Napríklad pri zohľadnení riadenia súbežnosti sú zabezpečené zámky na úrovni tabuľky, a hoci MyISAM sám nepodporuje odolnosť voči chybám, môže sa použiť na obnovu po poruchách cez myisamchk. A keďže MyISAM používa vlastné nezávislé úložné súbory (MYD dátový súbor a MYI indexový súbor) pre každú tabuľku, je veľmi pohodlné zálohovať a obnovovať (stačí prepísanie kópie) a podporuje aj online obnovu. V porovnaní s inými úložnými enginmi má MyISAM najviac nástrojov na kontrolu a opravu tabuliek. MyISAM tabuľky je možné komprimovať a podporujú fulltextové vyhľadávanie. Nie sú bezpečné pre transakcie a nepodporujú cudzie kľúče, takže ak vaša aplikácia transakcie nevyžaduje a spracováva len základné CRUD operácie, MyISAM je tou správnou voľbou.
InnoDB je navrhnutý pre situácie čítania a zápisu s vysokou súbežnosťou, využívajúc MVCC (Multi-Version Concurrency Control) a zámky na úrovni riadkov na zabezpečenie podpory transakcií v súlade s ACID. InnoDB podporuje integritu referencií cudzích kľúčov a má možnosti obnovy po chybách. Okrem toho je výkon InnoDB v skutočnosti celkom dobrý, najmä pri spracovaní veľkého množstva dát, v oficiálnych termínoch: CPU efektivita InnoDB je neporovnateľná s inými diskovými relačnými databázovými úložiskami. Zálohovanie a obnova v InnoDB je však trochu zložitejšia, pokiaľ nevyužijete podporu pre viacnásobné tabuľky vo verzii 4.1 alebo novšej, pretože na rozdiel od MyISAM, dátové súbory InnoDB nezodpovedajú každej tabuľke samostatne. Namiesto toho sa používa zdieľaný stôl a jednoduchá metóda kopírovania mu nevyhovuje, a dáta musia byť obnovené po zastavení MYSQL. Použitím tablespacesd pre jednotlivé tabuľky spôsobí, že každá tabuľka zodpovedá samostatnému súboru v tablespace, situácia je oveľa jednoduchšia. Má rovnaké vlastnosti ako typy BDB a tiež podporuje cudzie kľúče. InnoDB tabuľky sú rýchle a majú bohatšie funkcie ako BDB, preto sa odporúčajú, ak potrebujete transakčne zabezpečený úložný engine.

Vo všeobecnosti je InnoDB dobrá voľba, ak je potrebná podpora transakcií, a má vysokú frekvenciu súbežného čítania a zápisu. BDB možno zvážiť, ak frekvencia súbežných čítaní a zápisov nie je vysoká, ale BDB už nebude podporovaná v MySQL 5.1 a novších verziách. Táto možnosť je preč

Predvolene sú transakcie v InnoDB otvorené (nastaviť automatický commit = 0), čo znamená, že zakaždým, keď sa vloží záznam, tabuľka InnoDB ju bude považovať za samostatnú transakciu. Ak vložíme 10 000 záznamov a transakciu neuzavrieme, tabuľka typu InnoDB ju bude považovať za 10 000 transakcií a celkový čas vloženia je v tomto čase veľký, v tomto momente musíme najprv vypnúť transakciu a potom ju vložiť, takže rýchlosť bude veľmi rýchla. Čo sa týka haldy a BDB (Berkeley DB), relatívne povedané, miera penetrácie nie je taká dobrá ako pri predchádzajúcich dvoch, ale v niektorých prípadoch, Heap storage engine je stále veľmi použiteľný, ukladá dáta do pamäte a je extrémne rýchly, pretože nečaká disk I/O. Ale keďže ide o pamäťový úložný engine, akékoľvek úpravy zmiznú po reštarte servera. Heap je skvelé miesto na testovanie BDB, keďže je to prvý transakčne bezpečný úložný engine MySQL. Postavený na základe databázovej knižnice Berkeley DB, je tiež transakčne bezpečný, ale BDB zjavne nie je taký populárny ako InnoDB, pretože väčšina úložných enginov v MySQL, ktoré podporujú transakcie, tiež hľadá MVCC alebo riadkové uzamykacie úložné enginy, zatiaľ čo BDB podporuje iba Page-level Lock.

Engine InnoDB

InnoDB je transakčný úložný engine, ktorý podporuje rollbacky a je navrhnutý tak, aby poskytoval vysokovýkonné služby pri spracovaní veľkého množstva dát, pričom počas behu vytvára bufferové pooly v pamäti na ukladanie dát a indexov.

Výhody enginu InnoDB:

1. Podporovať spracovanie transakcií a funkcie transakcií ACID;

2. Realizujú sa štyri úrovne izolácie štandardu SQL;

3. Podporujte obmedzenia zámku na úrovni riadkov a cudzích kľúčov;

4. Na obnovu dát môžete použiť transakčné záznamy.

5. Úroveň zámku je riadkový zámok, ktorý je vhodný na časté úpravy tabuliek s vysokou súbežnosťou, a vysoká súbežnosť je lepšia ako MyISAM. Nevýhodou je, že spotreba systému je veľká.

6. Index nielenže ukladá sám seba, ale aj dáta, čo vyžaduje viac pamäte než MyISAM.

Nevýhody enginu InnoDB:

Keďže neukladá počet riadkov v tabuľke, celá tabuľka sa prehľadáva pri použití štatistík COUNT.

MyISAM engine

MyISAM je predvolený engine pred MySQL 5.5.5 a je navrhnutý na rýchle čítanie.

Výhody motora MyISAM:

1. Vysokovýkonné čítanie;

2. Pretože ukladá počet riadkov v tabuľke, celá tabuľka nebude skenovaná pri použití štatistík COUNT;

Nevýhody motora MyISAM:

1. Výška zámku je stolový zámok a výhodou zámku je malý strop a zámok je rýchly; Nevýhodou je, že granularita zámku je veľká, pravdepodobnosť impulzu zámku je vysoká a kapacita súbežnosti nízka, čo je vhodné pre služby založené na dotazoch.

2. Tento engine nepodporuje transakcie ani cudzie kľúče.

3. Operácie INSERT a UPDATE musia uzamknúť celú tabuľku;

4. Ukladá počet riadkov v tabuľke, takže pri výbere COUNT(*) z tabuľky stačí priamo prečítať uložené hodnoty bez skenovania celej tabuľky.

Použiteľné scenáre

MyISAM je vhodný na: (1) vykonávanie veľkého počtu výpočtov; (2) Zriedkavé vkladanie a veľmi časté dotazy; (3) Žiadny biznis nie je.

InnoDB je vhodný pre: (1) požiadavky na vysokú spoľahlivosť alebo transakcie; (2) Aktualizácie tabuliek a dotazy sú pomerne časté a pravdepodobnosť uzamknutia tabuliek je relatívne vysoká.

Porovnanie tabuliek

VlastnostiMyISAMHaldaBDBInnoDB
TransakcieNepodporovanéNepodporovanéV nádržiV nádrži
Granularita zámkuZámok stolaZámok stolaZámok stránky (stránka, 8KB)Zámok
skladovanieRozdelené súboryV pamätiJeden súbor na stôlStolový priestor
Úroveň izolácienieniePrečítajte si záväznéVšetko
Prenosný formátbyťN/Aniebyť
Úplnosť citácienienieniebyť
Dátový primárny kľúčnieniebyťbyť
MySQL uchováva dátové záznamy do vyrovnávacej pamätenieÁnoÁnoÁno
PoužiteľnosťPlná verziaPlná verziaMySQL-MaxPlná verzia


Niektoré rozdiely v detailoch


1. InnoDB nepodporuje indexy typu FULLTEXT, ktoré sú podporované od MySQL 5.6 (experimentálne).

2. InnoDB neukladá presný počet riadkov tabuľky, teda pri vykonávaní select count() z tabuľky musí InnoDB prehľadať celú tabuľku, aby vypočítal, koľko riadkov obsahuje, ale MyISAM stačí jednoducho prečítať počet uložených riadkov. Všimnite si, že keď príkaz count() obsahuje podmienku kde, operácia je rovnaká pre obe tabuľky.

3. Pre polia AUTO_INCREMENT typu musí InnoDB obsahovať index iba s týmto poľom, ale v tabuľke MyISAM môžete vytvoriť spoločný index s inými poľami.

4. Keď DELETE FROM tabuľky, InnoDB nevytvorí tabuľku znova, ale vymaže ju riadok po riadku.

5. Operácia LOAD TABLE FROM MASTER nefunguje pre InnoDB, riešením je najprv zmeniť tabuľku InnoDB na tabuľku MyISAM, importovať dáta a potom ich zmeniť na tabuľku InnoDB, ale nie je to použiteľné pre tabuľku, ktorá používa ďalšie funkcie InnoDB (napríklad cudzie kľúče).

6. Okrem toho zámok riadkov tabuľky InnoDB nie je absolútny, ak MySQL nedokáže určiť rozsah, ktorý má byť prehľadaný pri vykonávaní SQL príkazu, tabuľka InnoDB tiež uzamkne celú tabuľku.

7. InnoDB nepodporuje indexovanie plného textu, zatiaľ čo MyISAM áno. Indexovanie celého textu znamená vytvorenie indexu opačného poradia každého slova v char, varchar a texte (okrem zastavených slov). Fulltextový index MyISAM je v skutočnosti zbytočný, pretože nepodporuje segmentáciu čínskych slov a musí byť zapísaný do dátovej tabuľky používateľom po segmentácii slov, pričom slová s menej ako 4 čínskymi znakmi budú ignorované ako stopové slová.





Predchádzajúci:Zostaviť experimentálne otázky
Budúci:SQL statement to Varchar type
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com