Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 13183|Odpověď: 0

[Zdroj] MyISAM je rozdíl mezi databázovým úložištím MySQL a InnoDB

[Kopírovat odkaz]
Zveřejněno 13.04.2020 9:53:49 | | |
Pokud jde o MySQL, bylo by obtížné pochopit MyISAM a InnoDB, což jsou dva z nejznámějších a nejrozšířenějších MySQL úložných enginů. Dnes vám povím o rozdílu mezi MyISAM a InnoDB v MySQL...

Co je MyISAM?

MyISAM je výchozí úložný engine pro relační databázový systém MySQL (před verzí 5.5)。 Tato struktura úložiště MySQL v tabulkách rozšiřuje mnoho užitečných funkcí ze starého ISAM kódu. V nové verzi MySQL engine InnoDB hojně nahrazuje MyISAM díky svým výhodám v oblasti transakcí, referenční integrity a vyšší souběžnosti.
Každá tabulka MyISAM odpovídá třem souborům na pevném disku. Všechny tři soubory mají stejný název souboru, ale různé přípony pro označení typového účelu: soubor .frm obsahuje definici tabulky, ale tento soubor není součástí enginu MyISAM, ale je součástí serveru; .MYD uchovává data tabulky; .MYI je indexový soubor tabulky.

Co je InnoDB?

InnoDB je další úložný engine pro MySQL a nová verze standardu vydaná společností MySQL AB je zahrnuta ve všech binárních instalačních balíčcích.Od 5.5 jako výchozí úložný engine。 Jeho výhodou oproti ostatním úložným enginům je podpora transakcí kompatibilních s ACID (podobně jako PostgreSQL) a integrita parametrů (tj. podpora cizích klíčů).

Oracle Corporation získala Innobase v říjnu 2005. Innobase používá autorizaci s duální autentizací. Je distribuován pomocí GNU a umožňuje také dalším skupinám, které chtějí začlenit InnoDB do komerčního softwaru, získat licenci.

Nejpopulárnějšími úložnými enginy jsou MyISAM a InnoDB. Hlavní rozdíly mezi MyISAM a InnoDB jsou ve výkonu a řízení transakcí. MyISAM je rozšířená implementace raného ISAM (Indexed Sequential Access Method, ISAM již není podporován po MySQL 5.0), ISAM je navržen tak, aby zvládl situace, kdy je četba mnohem vyšší než frekvence zápisu, takže ISAM a později MyISAM neberou v úvahu podporu věcí, vylučují TPM, nepotřebují záznamy transakcí, efektivita dotazů ISAM je značná a spotřeba paměti je velmi malá.
MyISAM tyto výhody dědí a zároveň drží krok s dobou a přináší velké množství užitečných nových funkcí a souvisejících nástrojů. Například s ohledem na řízení souběžnosti jsou zajištěny zámky na úrovni tabulky, a i když MyISAM sám nepodporuje odolnost vůči chybám, lze jej použít k obnově po selhání přes myisamchk. A protože MyISAM používá pro každou tabulku vlastní nezávislé úložné soubory (MYD datový soubor a MYI index), je velmi pohodlné zálohovat a obnovovat (stačí přepsání kopírování) a také podporuje online obnovu. Ve srovnání s jinými úložnými enginy má MyISAM většinu nástrojů pro kontrolu a opravu tabulek. Tabulky MyISAM lze komprimovat a podporují vyhledávání v plném textu. Nejsou bezpečné pro transakce a nepodporují cizí klíče, takže pokud vaše aplikace nevyžaduje transakce a zpracovává pouze základní CRUD operace, pak je MyISAM tou správnou volbou.
InnoDB je navržen pro situace čtení a zápisu s vysokou souběžností, využívá MVCC (Multi-Version Concurrency Control) a zámky na úrovni řádků pro zajištění transakční podpory v souladu s ACID. InnoDB podporuje integritu referencí cizích klíčů a má možnosti obnovy chyb. Navíc výkon InnoDB je ve skutečnosti poměrně dobrý, zejména při zpracování velkého množství dat, v oficiálních termínech: CPU InnoDB je nepřekonatelná s jinými diskovými relačními databázovými úložišti. Zálohování a obnova v InnoDB je však trochu problematická, pokud nevyužijete podporu multi-tablespace ve verzi 4.1 nebo novější, protože na rozdíl od MyISAM datové soubory InnoDB neodpovídají každé tabulce samostatně. Místo toho se používá sdílený prostor tabulek, a jednoduchá metoda přepisování kopírování pro něj není vhodná, a data musí být obnovena po zastavení MYSQL. Použitím tablespaces pro jednotlivé tabulky způsobí, že každá tabulka odpovídá samostatnému souboru s tablespace, situace je mnohem jednodušší. Má stejné vlastnosti jako typy BDB a také podporuje cizí klíče. Tabulky InnoDB jsou rychlé a mají bohatší funkce než BDB, proto se doporučují, pokud potřebujete transakční bezpečný úložný engine.

Obecně je InnoDB dobrou volbou, pokud je potřeba podpora transakcí, a má vysokou frekvenci souběžného čtení a zápisu. BDB lze zvážit, pokud frekvence souběžných čtení a zápisů není vysoká, ale BDB již nebude podporována v MySQL 5.1 a novějších verzích. Tato možnost zmizela

Ve výchozím nastavení jsou transakce v InnoDB otevřené (nastavte automatický závazek = 0), což znamená, že pokaždé, když je záznam vložen, tabulka InnoDB ji bude považovat za samostatnou transakci. Pokud vložíme 10 000 záznamů a transakci neuzavřeme, tabulka typu InnoDB ji bude považovat za 10 000 transakcí a celkový čas vložení je v tuto chvíli velký, v tuto chvíli musíme nejprve transakci vypnout a pak ji vložit, takže rychlost bude velmi rychlá. Co se týče haldy a BDB (Berkeley DB), relativně vzato, míra penetrace není tak dobrá jako u předchozích dvou, ale v některých případech, Heap storage engine je stále velmi použitelný, ukládá data do paměti a je extrémně rychlý, protože na něj nečeká žádný diskový I/O. Ale protože jde o paměťový skladovací engine, jakékoliv úpravy po restartu serveru zmizí. Heap je skvělé místo pro testování BDB, protože je to první transakční bezpečný úložný engine MySQL. Postavený na základě databázové knihovny Berkeley DB, je také transakční bezpečný, ale BDB samozřejmě není tak populární jako InnoDB, protože většina úložných enginů v MySQL podporujících transakce také hledá MVCC nebo zámkové úložné enginy na úrovni řádků, zatímco BDB podporuje pouze Page-level Lock.

Engine InnoDB

InnoDB je transakční úložný engine, který podporuje rollbacky a je navržen tak, aby poskytoval vysoce výkonné služby při zpracování velkého množství dat, přičemž během běhu vytváří bufferové pooly v paměti pro ukládání dat a indexů.

Výhody enginu InnoDB:

1. Podpora zpracování transakcí a funkcí transakcí ACID;

2. Realizují se čtyři úrovně izolace standardu SQL;

3. Podpora zámků na úrovni řádků a cizích klíčů;

4. Pro obnovu dat můžete použít transakční záznamy.

5. Úroveň zámku je řádová zámok, což je vhodné pro časté úpravy tabulky s vysokou souběžností, a vysoká souběžnost je lepší než MyISAM. Nevýhodou je, že spotřeba systému je vysoká.

6. Index nejen sám sebe ukládá do mezipaměti, ale také uchovává data, což vyžaduje více paměti než MyISAM.

Nevýhody enginu InnoDB:

Protože neukládá počet řádků v tabulce, celá tabulka se při použití statistik COUNT prohledává.

MyISAM engine

MyISAM je výchozí engine před MySQL 5.5.5 a je navržen pro rychlé čtení.

Výhody enginu MyISAM:

1. Vysoce výkonné čtení;

2. Protože ukládá počet řádků v tabulce, celá tabulka nebude při použití statistik COUNT prohledávána;

Nevýhody engineu MyISAM:

1. Úroveň zámku je stolní zámek a výhodou hodinkového zámku je, že stropní zámek je malý a zámek je rychlý; Nevýhodou je, že granularita zámku je velká, pravděpodobnost impulzu zámku je vysoká a kapacita souběžnosti nízká, což je vhodné pro služby založené na dotazech.

2. Tento engine nepodporuje transakce ani cizí klíče.

3. Operace INSERT a UPDATE musí uzamknout celou tabulku;

4. Ukládá počet řádků v tabulce, takže když VYBERE COUNT(*) Z TABULKY, stačí přímo přečíst uložené hodnoty bez prohledání celé tabulky.

Použitelné scénáře

MyISAM je vhodný pro: (1) provádění mnoha výpočtů počítání; (2) Vzácné a velmi časté dotazy; (3) Není tu žádný obchod.

InnoDB je vhodný pro: (1) požadavky na vysokou spolehlivost nebo transakce; (2) Aktualizace tabulek a dotazy jsou poměrně časté a pravděpodobnost uzamčení tabulky je relativně vysoká.

Porovnání tabulek

VlastnostiMyISAMHaldaBDBInnoDB
TransakceNepodporovánoNepodporovánoNení po všem, dokud není po všemNení po všem, dokud není po všem
Granularita zámkuZámek stoluZámek stoluZámek stránky (stránka, 8KB)Zdymadlo
skladováníRozdělené souboryV pamětiJeden soubor na tabulkuStolní prostor
Úroveň izolaceneneČtěte CommitmentVšichni
Přenosný formátbýtN/Anebýt
Úplnost citacenenenebýt
Primární klíč datnenebýtbýt
MySQL cache datové záznamyneAnoAnoAno
použitelnostPlná verzePlná verzeMySQL-MaxPlná verze


Některé rozdíly v detailech


1. InnoDB nepodporuje indexy typu FULLTEXT, což je podporováno od MySQL 5.6 (experimentální).

2. InnoDB neukládá konkrétní počet řádků tabulky, tedy při vykonávání select count() z tabulky musí InnoDB prohledat celou tabulku, aby vypočítal, kolik řádků je, ale MyISAM stačí jednoduše přečíst počet uložených řádků. Všimněte si, že pokud příkaz count() obsahuje podmínku kde, operace je stejná pro obě tabulky.

3. Pro pole AUTO_INCREMENT typu musí InnoDB obsahovat index pouze s tímto polem, ale v tabulce MyISAM můžete vytvořit společný index s ostatními poli.

4. Při DELETE FROM tabulky InnoDB tabulku neobnoví, ale smaže ji řádek po řádku.

5. Operace LOAD TABLE FROM MASTER nefunguje pro InnoDB, řešením je nejprve změnit tabulku InnoDB na tabulku MyISAM, importovat data a poté je změnit do tabulky InnoDB, ale není použitelná pro tabulku, která používá další funkce InnoDB (například cizí klíče).

6. Navíc zámek řádků tabulky InnoDB není absolutní, pokud MySQL nedokáže určit rozsah, který má být prohledán při provádění SQL příkazu, tabulka InnoDB také uzamkne celou tabulku.

7. InnoDB nepodporuje indexování plného textu, zatímco MyISAM ano. Indexování plného textu znamená vytvoření indexu v opačném pořadí každého slova v char, varchar a textu (kromě stop slov). Fulltextový index MyISAM je ve skutečnosti k ničemu, protože nepodporuje segmentaci čínských slov a uživatel jej musí po segmentaci slov zapsat do datové tabulky, přičemž slova s méně než 4 čínskými znaky budou ignorována stejně jako stop slova.





Předchozí:Sestavte experimentální otázky
Další:SQL příkaz do typu Varchar
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com