Storage engines er MySQL-komponenter, der håndterer SQL-operationer for forskellige tabeltyper. InnoDB
er standard og den mest generelle lagringsmotor, og Oracle anbefaler at bruge den til tabeller undtagen i specialiserede tilfælde af brug. (CREATE TABLE
-anvisningen i MySQL 8.0 opretter InnoDB
-tabeller som standard.)
MySQL Server bruger en arkitektur med indsættelige lagringsmotorer, der gør det muligt at indlæse lagringsmotorer i og udlæse dem fra en kørende MySQL-server.
For at bestemme, hvilke lagringsmotorer din server understøtter, skal du bruge SHOW ENGINES
-erklæringen. Værdien i kolonnen Support
angiver, om en motor kan bruges. En værdi på YES
, NO
eller DEFAULT
angiver, at en motor er tilgængelig, ikke tilgængelig eller tilgængelig og i øjeblikket er indstillet 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...
Dette kapitel dækker anvendelsestilfælde for MySQL-lagringsmotorer til særlige formål. Det dækker ikke standard InnoDB
-lagringsmotoren eller NDB
-lagringsmotoren, som er dækket i Kapitel 15, InnoDB-lagringsmotoren og Kapitel 23, MySQL NDB Cluster 8.0. For avancerede brugere indeholder den også en beskrivelse af arkitekturen for den pluggable lagringsmotor (se Afsnit 16.11, “Oversigt over MySQL lagringsmotorarkitektur”).
For oplysninger om funktioner, der tilbydes i kommercielle binære MySQL Server-versioner, se MySQL-udgaver på MySQL-webstedet. De tilgængelige lagringsmotorer kan afhænge af, hvilken udgave af MySQL du bruger.
For svar på ofte stillede spørgsmål om MySQL-lagringsmotorer, se Afsnit A.2, “MySQL 8.0 FAQ”: Lagringsmotorer”.
MySQL 8.0 understøttede lagringsmotorer
-
InnoDB
: Standardlagringsmotoren i MySQL 8.0.InnoDB
er en transaktionssikker (ACID-kompatibel) lagringsmotor til MySQL, der har commit-, rollback- og crash-recovery-funktioner til at beskytte brugerdata.InnoDB
låsning på række-niveau (uden eskalering til låsninger med grovere granularitet) og Oracle-style konsistente ikke-låsende læsninger øger flerbrugerkonkurrence og ydeevne.InnoDB
gemmer brugerdata i clusterede indekser for at reducere I/O for almindelige forespørgsler baseret på primære nøgler. For at opretholde dataintegriteten understøtterInnoDB
ogsåFOREIGN KEY
referential-integritetsbegrænsninger. Du kan finde flere oplysninger omInnoDB
i kapitel 15, InnoDB-lagringsmotoren. -
MyISAM
: Disse tabeller har et lille fodaftryk. Låsning på tabelniveau begrænser ydeevnen i læse/skrive-arbejdsbelastninger, så den bruges ofte i skrivebeskyttede eller mest læste arbejdsbelastninger i web- og datawarehousing-konfigurationer. -
Memory
: Gemmer alle data i RAM, så der er hurtig adgang i miljøer, der kræver hurtige opslag af ikke-kritiske data. Denne motor var tidligere kendt somHEAP
-motoren. Dens anvendelsesområder er faldende;InnoDB
giver med sit bufferpool-hukommelsesområde en generel og holdbar måde at opbevare de fleste eller alle data i hukommelsen på, ogNDBCLUSTER
giver hurtige nøgle-værdiopslag til store distribuerede datasæt. -
CSV
: Dens tabeller er i virkeligheden tekstfiler med kommaseparerede værdier. CSV-tabeller giver dig mulighed for at importere eller dumpe data i CSV-format, så du kan udveksle data med scripts og programmer, der læser og skriver i det samme format. Da CSV-tabeller ikke er indekseret, beholder du typisk dataene iInnoDB
-tabeller under normal drift og bruger kun CSV-tabellerne i import- eller eksportfasen. -
Archive
: Disse kompakte, ikke indekserede tabeller er beregnet til lagring og hentning af store mængder af sjældent refererede historiske, arkiverede eller sikkerhedsrevisionsoplysninger. -
Blackhole
: Blackhole-lagringsmotoren accepterer, men lagrer ikke data, svarende til Unix-enheden/dev/null
. Forespørgsler returnerer altid et tomt sæt. Disse tabeller kan bruges i replikeringskonfigurationer, hvor DML-angivelser sendes til replikaservere, men hvor kildeserveren ikke beholder sin egen kopi af dataene. -
NDB
(også kendt somNDBCLUSTER
): Denne clusterede databasemotor er særlig velegnet til applikationer, der kræver den højest mulige grad af oppetid og tilgængelighed. -
Merge
: Gør det muligt for en MySQL DBA eller udvikler at gruppere en række identiskeMyISAM
tabeller logisk og henvise til dem som ét objekt. Godt til VLDB-miljøer som f.eks. datawarehousing. -
Federated
: Giver mulighed for at forbinde separate MySQL-servere for at oprette en logisk database fra mange fysiske servere. Meget god til distribuerede miljøer eller datamart-miljøer. -
Example
: Denne motor tjener som et eksempel i MySQL-kildekoden, der illustrerer, hvordan man begynder at skrive nye lagringsmotorer. Den er primært af interesse for udviklere. Lagringsmotoren er en “stub”, der ikke gør noget. Du kan oprette tabeller med denne motor, men der kan ikke lagres data i dem eller hentes data fra dem.
Du er ikke begrænset til at bruge den samme lagringsmotor til en hel server eller et helt skema. Du kan angive lagringsmotoren for en hvilken som helst tabel. Et program kan f.eks. bruge mest InnoDB
-tabeller med et CSV
-tabeller til eksport af data til et regneark og et par MEMORY
-tabeller til midlertidige arbejdsområder.
Valg af lagringsmotor
De forskellige lagringsmotorer, der leveres med MySQL, er designet med forskellige brugssituationer i tankerne. Den følgende tabel giver en oversigt over nogle af de lagringsmotorer, der leveres med MySQL, med forklarende noter efter tabellen.
Tabel 16.1 Oversigt over funktioner i storage-motorer
Funktioner | MyISAM | Memory | InnoDB | Archive | NDB | ||
---|---|---|---|---|---|---|---|
B-tree indexes | Ja | Ja | Ja | Nej | Nej | ||
Backup/point-in-time recovery (note 1) | Ja | Ja | Ja | Ja | Ja | Ja | |
Understøttelse af klyngedatabase | Nej | Nej | Nej | Nej | Nej | Ja | |
Clusterede indekser | Nej | Nej | Ja | Nej | Nej | Nej | |
Komprimerede data | Ja (note 2) | Nej | Ja | Ja | Ja | Nej | |
Data caches | Nej | N/A | Ja | Nej | Ja | ||
Krypterede data | Ja (note 3) | Ja (note 3) | Ja (note 3) | Ja (note 4) | Ja (note 3) | Ja (note 3) | |
Understøttelse af fremmed nøgle | Nej | Nej | Ja | Nej | Ja (note 5) | ||
Fuld-tekstsøgningsindekser | Ja | Nej | Ja (note 6) | Nej | Nej | Nej | |
Geospatial understøttelse af datatyper | Ja | Nej | Ja | Ja | Ja | Ja | |
Geospatial indeksering understøttelse | Ja | Nej | Ja (note 7) | Nej | Nej | Nej | |
Hash-indekser | Nej | Ja | Nej (note 8) | Nej | Ja | ||
Indeks-caches | Ja | N/A | Ja | Nej | Ja | ||
Låsegranularitet | Tabel | Tabel | Tabel | Række | Row | Row | |
MVCC | No | No | Yes | No | No | No | |
Understøttelse af gentagelse (note 1) | Ja | Begrænset (note 9) | Ja | Ja | Ja | Ja | |
Storagebegrænsninger | 256TB | RAM | 64TB | Ingen | 384EB | ||
T-tree indexes | No | No | No | No | No | Yes | |
Transactions | No | No | No | Yes | No | No | Ja |
opdatere statistik for dataordbog | Ja | Ja | Ja | Ja | Ja | Ja |
Noter:
1. Implementeret i serveren i stedet for i lagringsmotoren.
2. Komprimerede MyISAM-tabeller understøttes kun, når der anvendes det komprimerede rækkeformat. Tabeller, der anvender det komprimerede rækkeformat med MyISAM, er skrivebeskyttede.
3. Implementeret i serveren via krypteringsfunktioner.
4. Implementeret i serveren via krypteringsfunktioner; I MySQL 5.7 og nyere understøttes kryptering af data i hvile.
5. Understøttelse af fremmednøgler er tilgængelig i MySQL Cluster NDB 7.3 og senere.
6. Understøttelse af FULLTEXT-indekser er tilgængelig i MySQL 5.6 og senere.
7. Understøttelse af geospatial indeksering er tilgængelig i MySQL 5.7 og senere.
8. InnoDB anvender hash-indekser internt til sin funktion Adaptive Hash Index.
9. Se diskussionen senere i dette afsnit.