Úložné motory jsou komponenty MySQL, které zpracovávají operace SQL pro různé typy tabulek. InnoDB
Je to výchozí a nejobecnější úložný engine a společnost Oracle jej doporučuje používat pro tabulky s výjimkou specializovaných případů použití. (Příkaz CREATE TABLE
v MySQL 8.0 vytváří ve výchozím nastavení tabulky InnoDB
.)
MySQL Server používá architekturu zásuvných úložných motorů, která umožňuje načítat úložné motory do běžícího serveru MySQL a odpojovat je od něj.
Chcete-li zjistit, které úložné motory váš server podporuje, použijte příkaz SHOW ENGINES
. Hodnota ve sloupci Support
udává, zda lze daný engine použít. Hodnota YES
, NO
nebo DEFAULT
označuje, že engine je k dispozici, není k dispozici nebo je k dispozici a je aktuálně nastaven jako výchozí úložný engine.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Tato kapitola se zabývá případy použití speciálních úložných motorů MySQL. Nezabývá se výchozím úložným motorem InnoDB
ani úložným motorem NDB
, které jsou popsány v kapitole 15, Úložný motor InnoDB a kapitole 23, MySQL NDB Cluster 8.0. Pro pokročilé uživatele obsahuje také popis architektury zásuvných úložných motorů (viz kapitola 16.11, „Přehled architektury úložných motorů MySQL“).
Informace o funkcích nabízených v komerčních binárních verzích serveru MySQL naleznete v části MySQL Editions na webových stránkách MySQL. Dostupné úložné motory mohou záviset na tom, jakou edici MySQL používáte.
Odpovědi na často kladené otázky týkající se úložných motorů MySQL naleznete v části A.2, „MySQL 8.0 FAQ:
Podporované úložné motory MySQL 8.0
-
InnoDB
: Výchozí úložný motor v MySQL 8.0.InnoDB
je transakčně bezpečný (ACID kompatibilní) úložný engine pro MySQL, který má funkce commit, rollback a crash-recovery pro ochranu uživatelských dat. Zamykání na úrovni řádkůInnoDB
(bez eskalace na zámky s hrubší granularitou) a konzistentní nezamykající čtení ve stylu Oracle zvyšují souběžnost a výkonnost více uživatelů.InnoDB
Ukládá uživatelská data do clusterových indexů, aby se snížil počet I/O pro běžné dotazy založené na primárních klíčích. Pro zachování integrity dat podporujeInnoDB
také omezeníFOREIGN KEY
referenční integrity. Další informace oInnoDB
najdete v kapitole 15, Úložný engine InnoDB. -
MyISAM
: Tyto tabulky mají malou plochu. Zamykání na úrovni tabulky omezuje výkon v zátěžích čtení/zápis, proto se často používá v zátěžích pouze pro čtení nebo převážně pro čtení v konfiguracích webu a datových skladů. -
Memory
: Ukládá všechna data do paměti RAM pro rychlý přístup v prostředích, která vyžadují rychlé vyhledávání nekritických dat. Tento engine byl dříve znám jako engineHEAP
. Případů jeho použití ubývá;InnoDB
se svou vyrovnávací paměťovou oblastí buffer pool poskytuje univerzální a trvanlivý způsob uchovávání většiny nebo všech dat v paměti aNDBCLUSTER
poskytuje rychlé vyhledávání klíčových hodnot pro obrovské distribuované datové sady. -
CSV
: Jeho tabulky jsou ve skutečnosti textové soubory s hodnotami oddělenými čárkou. Tabulky CSV umožňují importovat nebo vypisovat data ve formátu CSV pro výměnu dat se skripty a aplikacemi, které čtou a zapisují ve stejném formátu. Protože tabulky CSV nejsou indexované, při běžném provozu obvykle uchováváte data v tabulkáchInnoDB
a tabulky CSV používáte pouze ve fázi importu nebo exportu. -
Archive
: Tyto kompaktní neindexované tabulky jsou určeny k ukládání a vyhledávání velkého množství zřídkakdy odkazovaných historických, archivovaných nebo bezpečnostních auditních informací. -
Blackhole
: Úložiště Blackhole přijímá, ale neukládá data, podobně jako unixové zařízení/dev/null
. Dotazy vždy vracejí prázdnou množinu. Tyto tabulky lze použít v konfiguracích replikace, kdy jsou příkazy DML odesílány na servery replik, ale zdrojový server neuchovává vlastní kopii dat. -
NDB
(známé také jakoNDBCLUSTER
): Tento clusterový databázový stroj je vhodný zejména pro aplikace, které vyžadují nejvyšší možnou míru provozuschopnosti a dostupnosti. -
Merge
: Umožňuje DBA nebo vývojáři MySQL logicky seskupit řadu stejnýchMyISAM
tabulek a odkazovat na ně jako na jeden objekt. Vhodné pro prostředí VLDB, například pro datové sklady. -
Federated
: Nabízí možnost propojit samostatné servery MySQL a vytvořit jednu logickou databázi z mnoha fyzických serverů. Velmi dobré pro distribuovaná prostředí nebo prostředí data mart. -
Example
: Tento stroj slouží jako příklad ve zdrojovém kódu MySQL, který ilustruje, jak začít psát nové úložné stroje. Zajímá především vývojáře. Úložný engine je „stub“, který nic nedělá. Pomocí tohoto enginu můžete vytvářet tabulky, ale nelze do nich ukládat ani z nich načítat žádná data.
Nejste omezeni na použití stejného úložného enginu pro celý server nebo schéma. Mechanismus ukládání můžete určit pro libovolnou tabulku. Například aplikace může používat převážně tabulky InnoDB
, s jednou tabulkou CSV
pro export dat do tabulkového procesoru a několika tabulkami MEMORY
pro dočasné pracovní prostory.
Výběr úložného stroje
Různé úložné stroje dodávané s MySQL jsou navrženy s ohledem na různé případy použití. Následující tabulka poskytuje přehled některých úložných motorů dodávaných s MySQL, přičemž za tabulkou jsou uvedeny vysvětlující poznámky.
Tabulka 16.1 Přehled funkcí úložných motorů
Funkce | MyISAM | Paměť | InnoDB | Archiv | NDB | |
---|---|---|---|---|---|---|
B-.stromové indexy | Ano | Ano | Ano | No | No | |
Zálohování/point-in-time recovery (pozn. 1) | Ano | Ano | Ano | Ano | Ano | |
Podpora clusterové databáze | Ne | Ne | Ne | Ne | Ne | Ano |
Klastrované indexy | Ne | Ne | Ano | Ne | Ne | |
Komprimovaná data | Ano (pozn. 2) | Ne | Ano | Ano | Ne | |
Datová mezipaměť | Ne | N/A | Ano | Ne | Ano | |
Šifrovaná data | Ano (pozn. 3) | Ano (pozn. 3) | Ano (pozn. 4) | Ano (pozn. 3) | Ano (pozn. 3) | |
Podpora cizích klíčů | Ne | Ne | Ano | Ne | Ano (pozn. 5) | |
Plná-textové vyhledávací indexy | Ano | Ne | Ano (pozn. 6) | Ne | Ne | |
Geoprostorové podpora datových typů | Ano | Ne | Ano | Ano | Ano | |
Geoprostorové indexování podpora | Ano | Ne | Ano (pozn. 7) | Ne | Ne | |
Hash indexy | Ne | Ano | Ne (pozn. 8) | Ne | Ano | |
Indexové mezipaměti | Ano | N/A | Ano | No | Ano | |
Granularita zamykání | Tabulka | Tabulka | Řádek | Row | Row | |
MVCC | No | No | Yes | No | No | |
Podpora replikace (poznámka 1) | Ano | Omezená (poznámka 9) | Ano | Ano | Ano | Ano |
Omezení úložiště | 256TB | RAM | 64TB | žádné | 384EB | |
T-.stromové indexy | No | No | No | No | Ano | |
Transakce | No | No | Ano | No | No | Tak |
Aktualizace statistik pro datový slovník | Tak | Tak | Tak | Tak | Tak |
Poznámky:
1. Implementováno na serveru, nikoli v úložném stroji.
2. Komprimované tabulky MyISAM jsou podporovány pouze při použití komprimovaného formátu řádků. Tabulky používající komprimovaný formát řádků s MyISAM jsou určeny pouze pro čtení.
3. Implementováno na serveru prostřednictvím šifrovacích funkcí.
4. Implementováno na serveru prostřednictvím šifrovacích funkcí; V MySQL 5.7 a novějších verzích je podporováno šifrování dat v klidu.
5. Podporováno na serveru prostřednictvím šifrovacích funkcí. Podpora cizích klíčů je k dispozici v MySQL Cluster NDB 7.3 a novější.
6. Podpora indexů FULLTEXT je k dispozici v MySQL 5.6 a novější.
7. Podpora geoprostorového indexování je k dispozici v MySQL 5.7 a novější.
8. InnoDB interně využívá hash indexy pro svou funkci Adaptive Hash Index.
9. InnoDB využívá hash indexy. Viz diskusi dále v této části.