Lagringsmotorer är MySQL-komponenter som hanterar SQL-operationer för olika tabelltyper. InnoDB
är standard och den mest generella lagringsmotorn, och Oracle rekommenderar att du använder den för tabeller utom i specialiserade användningsfall. (CREATE TABLE
-angivelsen i MySQL 8.0 skapar InnoDB
-tabeller som standard.)
MySQL Server använder en pluggable storage engine-arkitektur som gör att lagringsmotorer kan laddas in i och lossas från en körd MySQL-server.
För att avgöra vilka lagringsmotorer som din server stöder använder du SHOW ENGINES
-anvisningen. Värdet i kolumnen Support
anger om en motor kan användas. Ett värde YES
, NO
eller DEFAULT
anger att en motor är tillgänglig, inte tillgänglig eller tillgänglig och för närvarande inställd som standardlagringsmotor.
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...
Det här kapitlet behandlar användningsfall för speciella MySQL-lagringsmotorer för speciella ändamål. Det täcker inte standardlagringsmotorn InnoDB
eller lagringsmotorn NDB
som behandlas i kapitel 15, The InnoDB Storage Engine och kapitel 23, MySQL NDB Cluster 8.0. För avancerade användare innehåller den också en beskrivning av arkitekturen för den pluggable lagringsmotorn (se avsnitt 16.11, ”Översikt över MySQL:s lagringsmotorarkitektur”).
För information om funktioner som erbjuds i kommersiella binärer för MySQL Server, se MySQL Editions, på MySQL:s webbplats. De tillgängliga lagringsmotorerna kan bero på vilken utgåva av MySQL du använder.
För svar på vanliga frågor om MySQL-lagringsmotorer, se avsnitt A.2, ”MySQL 8.0 FAQ”: Lagringsmotorer”.
MySQL 8.0 Supported Storage Engines
-
InnoDB
: Standardlagringsmotorn i MySQL 8.0.InnoDB
är en transaktionssäker (ACID-kompatibel) lagringsmotor för MySQL som har funktioner för commit, rollback och kraschåterställning för att skydda användardata.InnoDB
låsning på radnivå (utan eskalering till lås med grövre granularitet) och Oracle-liknande konsekventa läsningar utan låsning ökar samtidighet och prestanda för flera användare.InnoDB
lagrar användardata i klustrade index för att minska I/O för vanliga förfrågningar baserade på primära nycklar. För att upprätthålla dataintegriteten harInnoDB
också stöd förFOREIGN KEY
referential-integritetsbegränsningar. Mer information omInnoDB
finns i kapitel 15, InnoDB-lagringsmotorn. -
MyISAM
: Dessa tabeller har ett litet fotavtryck. Låsning på tabellnivå begränsar prestandan i arbetsbelastningar med läsning/skrivning, så den används ofta i arbetsbelastningar med enbart läsning eller mest läsning i webb- och datalagringskonfigurationer. -
Memory
: Lagrar alla data i RAM, för snabb åtkomst i miljöer som kräver snabba sökningar av icke-kritiska data. Den här motorn var tidigare känd somHEAP
-motorn. Dess användningsområden minskar;InnoDB
med sitt buffertpoolminne ger ett allmänt och hållbart sätt att förvara de flesta eller alla data i minnet, ochNDBCLUSTER
ger snabba sökningar av nyckelvärden för enorma distribuerade datamängder. -
CSV
: Dess tabeller är egentligen textfiler med kommaseparerade värden. Med CSV-tabeller kan du importera eller dumpa data i CSV-format för att utbyta data med skript och program som läser och skriver i samma format. Eftersom CSV-tabeller inte är indexerade behåller du vanligtvis data iInnoDB
-tabeller under normal drift och använder endast CSV-tabeller under import- eller exportfasen. -
Archive
: Dessa kompakta, oindexerade tabeller är avsedda för lagring och hämtning av stora mängder sällan refererad historisk, arkiverad eller säkerhetsrevisionsinformation. -
Blackhole
: Blackhole-lagringsmotorn tar emot men lagrar inte data, i likhet med Unix-enheten/dev/null
. Förfrågningar returnerar alltid en tom mängd. Dessa tabeller kan användas i replikeringskonfigurationer där DML-uttalanden skickas till replikaservrar, men där källservern inte har någon egen kopia av uppgifterna. -
NDB
(även känd somNDBCLUSTER
): Den här klustrade databasmotorn är särskilt lämpad för tillämpningar som kräver högsta möjliga grad av drifttid och tillgänglighet. -
Merge
: Gör det möjligt för en MySQL DBA eller utvecklare att logiskt gruppera en rad identiskaMyISAM
tabeller och referera dem som ett objekt. Bra för VLDB-miljöer som datalager. -
Federated
: Erbjuder möjlighet att länka separata MySQL-servrar för att skapa en logisk databas från många fysiska servrar. Mycket bra för distribuerade miljöer eller datamart-miljöer. -
Example
: Den här motorn fungerar som ett exempel i MySQL:s källkod som illustrerar hur man börjar skriva nya lagringsmotorer. Den är främst av intresse för utvecklare. Lagringsmotorn är en ”stub” som inte gör någonting. Du kan skapa tabeller med den här motorn, men inga data kan lagras i dem eller hämtas från dem.
Du är inte begränsad till att använda samma lagringsmotor för en hel server eller ett helt schema. Du kan ange lagringsmotor för alla tabeller. Ett program kan till exempel använda mestadels InnoDB
-tabeller, med en CSV
-tabell för export av data till ett kalkylblad och några MEMORY
-tabeller för tillfälliga arbetsutrymmen.
Att välja lagringsmotor
De olika lagringsmotorerna som tillhandahålls med MySQL är utformade med olika användningsområden i åtanke. Följande tabell ger en översikt över några lagringsmotorer som tillhandahålls med MySQL, med klargörande anmärkningar efter tabellen.
Tabell 16.1 Storage Engines Feature Summary
Feature | MyISAM | Memory | InnoDB | Archive | NDB | ||
---|---|---|---|---|---|---|---|
B-.trädindex | Ja | Ja | Ja | Nej | Nej | ||
Backup/point-in-tid (not 1) | Ja | Ja | Ja | Ja | Ja | ||
Stöd för klusterdatabaser | Nej | Nej | Nej | Nej | Nej | Nej | Ja |
Klusterade index | Nej | Nej | Ja | Nej | Nej | Nej | |
Komprimerade data | Ja (anm. 2) | Nej | Ja | Ja | Nej | ||
Datacacher | Nej | N/A | Ja | Nej | Ja | ||
Krypterade data | Ja (anm. 3) | Ja (anm. 3) | Ja (not 4) | Ja (not 3) | Ja (not 3) | ||
Stöd för utländska nycklar | Nej | Nej | Ja | Nej | Ja (not 5) | ||
Full-text sökindex | Ja | Nej | Ja (not 6) | Nej | Nej | ||
Geospatial stöd för datatyper | Ja | Nej | Ja | Ja | Ja | ||
Geospatial indexering stöd | Ja | Nej | Ja (not 7) | Nej | Nej | ||
Hash-index | Nej | Ja | Nej (not 8) | Nej | Ja | ||
Index caches | Ja | N/A | Ja | Nej | Ja | ||
Låsningsgranularitet | Tabell | Tabell | Rad | Row | Row | ||
MVCC | No | No | Yes | No | No | No | |
Stöd för replikering (not 1) | Ja | Begränsad (not 9) | Ja | Ja | Ja | Ja | |
Lagringsbegränsningar | 256TB | RAM | 64TB | Ingen | 384EB | ||
T-trädindex | No | No | No | No | Yes | ||
Transaktioner | No | No | No | Yes | No | No | Ja |
Uppdatera statistik för datalexikon | Ja | Ja | Ja | Ja | Ja |
Noter:
1. Implementeras i servern, snarare än i lagringsmotorn.
2. Komprimerade MyISAM-tabeller stöds endast när det komprimerade radformatet används. Tabeller som använder det komprimerade radformatet med MyISAM är skrivskyddade.
3. Implementeras i servern via krypteringsfunktioner.
4. Implementeras i servern via krypteringsfunktioner; i MySQL 5.7 och senare stöds kryptering av data i vila.
5. Stöd för utländska nycklar finns i MySQL Cluster NDB 7.3 och senare.
6. Stöd för FULLTEXT-index finns i MySQL 5.6 och senare.
7. Stöd för geospatial indexering finns i MySQL 5.7 och senare.
8. InnoDB använder hash-index internt för sin funktion Adaptive Hash Index.
9. Se diskussionen senare i det här avsnittet.