sidst ændret 10. juli 2020
I dette kapitel vil vi tale om MySQL-lagringsmotorer.
En lagringsmotor er et softwaremodul, som et databaseadministrationssystem bruger til at oprette, læse og opdatere data fra en database. Der er to typer af lagringsmotorer i MySQL: transaktionelle og ikke-transaktionelle.
For MySQL 5.5 og nyere er standardlagringsmotoren InnoDB.Standardlagringsmotoren for MySQL før version5.5 var MyISAM. Valg af den rigtige lagringsmotor er en vigtig strategisk beslutning, som vil påvirke den fremtidige udvikling. I denne vejledning vil vi bruge MyISAM-, InnoDB-, Memory- og CSV-lagringsmotorer. Hvis du er ny i MySQL og studerer MySQL-databaseadministrationssystemet, er dette ikke noget stort problem. Hvis du planlægger en produktionsdatabase, så bliver tingene mere komplicerede.
Liste over lagringsmotorer
MySQL understøttede lagringsmotorer:
- InnoDB
- MyISAM
- Memory
- CSV
- Merge
- Archive
- Federated
- Blackhole
- Example
InnoDB er den mest udbredte storage engine med transaktionsunderstøttelse. Det er en ACID-kompatibel lagringsmotor. Den understøtter låsning på rækkehøjde, genopretning efter nedbrud og samtidighedsstyring med flere versioner. Det er den eneste motor, der giver adgang til referentialintegritetsbegrænsning for fremmednøgler. Oracle anbefaler at bruge InnoDB til tabeller undtagen i specialiserede tilfælde.
MyISAM er den originale lagringsmotor. Det er en hurtig lagringsmotor.Den understøtter ikke transaktioner. MyISAM tilbyder table-levellocking. Den bruges mest til web og data warehousing.
Memory storage engine opretter tabeller i hukommelsen. Det er den hurtigste motor. Den giver låsning på tabelniveau. Den understøtter ikke transaktioner.Memory storage engine er ideel til at oprette midlertidige tabeller eller hurtige opslag.Dataene går tabt, når databasen genstartes.
CSV gemmer data i CSV-filer. Det giver stor fleksibilitet, fordi data i dette format let kan integreres i andre programmer.
Merge opererer på underliggende MyISAM-tabeller. Sammenlægningstabeller gør det nemmere at håndtere store datamængder. Det grupperer logisk en række identiske MyISAM-tabeller og refererer dem som ét objekt.Godt til datawarehousing-miljøer.
Archive storage engine er optimeret til indsættelse med høj hastighed. Den komprimerer data, når de indsættes. Den understøtter ikke transaktioner. Den er ideel til lagring og hentning af store mængder af sjældent refererede historiske, arkiverede data.
Lageringsmotoren Blackhole accepterer data, men lagrer dem ikke. Hentninger returnerer altid et tomt sæt. Funktionaliteten kan bruges i distribuerede databasedesigns, hvor data automatisk replikeres, men ikke lagres lokalt. Denne lagringsmotor kan bruges til at udføre præstationstest eller andre test.
Federated lagringsmotor giver mulighed for at adskille MySQL-servere for at oprette en logisk database fra mange fysiske servere. forespørgsler på den lokale server udføres automatisk på de eksterne (federerede) tabeller. Der gemmes ingen data på de lokale tabeller.Den er god til distribuerede miljøer.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 2. row *************************** Engine: CSV Support: YES Comment: CSV storage engineTransactions: NO XA: NO Savepoints: NO...
Kommandoen SHOW ENGINES
viser alle tilgængelige motorer, som serveren understøtter.
Valg af den rigtige motor
Ingen lagringsmotor er ideel til alle omstændigheder. Nogle fungerer bedst under visse betingelser og fungerer dårligere i andre situationer. Der er afvejninger, som skal overvejes. En mere sikker løsning kræver flere ressourcer; den kan være langsommere, tage mere CPU-tid og diskplads. MySQL er meget fleksibel idet faktum, at den tilbyder flere forskellige lagringsmotorer. Nogle af dem, som f.eks. arkivmotoren, er skabt til at blive brugt i bestemte situationer.
I nogle tilfælde er svaret klart. Når vi har med nogle betalingssystemer at gøre, er vi forpligtet til at bruge den mest sikre løsning. Vi har ikke råd til at miste sådanne følsomme data. InnoDB er vejen at gå. Hvis vi ønsker fuld tekstsøgning, så kan vi vælge enten MyISAM eller InnoDB… Kun InnoDB understøtter foreign key referential integrity constraint, og hvis vi har planer om at bruge denne begrænsning, er valget klart.
Specificering og ændring af lagringsmotorer
Lagringsmotoren specificeres på tidspunktet for oprettelse af tabellen.
mysql> CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), -> Cost INTEGER) ENGINE='MyISAM';
Nøgleordet ENGINE
specificerer den lagringsmotor, der anvendestil denne bestemte tabel.
Hvis vi ikke angiver lagringsmotoren eksplicit, anvendes standardlagringsmotoren. Før MySQL 5.5 var standardlagringsmotoren MyISAM. For MySQL 5.5 og senere er standardlagringsmotoren InnoDB.
Det er muligt at migrere til en anden lagringsmotor. Bemærk, at det kan tage lang tid at migrere en stor tabel. Vi kan også løbe ind i nogle problemer, når vi migrerer tabeller. Nogle funktioner er muligvis ikke understøttet i begge tabeller.
mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| InnoDB |+--------+1 row in set (0,05 sec)
Denne SQL-anvisning finder ud af, hvilken lagringsmotor der anvendes for en Cars
tabel i mydb
database. Vi kunne også bruge SELECT CREATE TABLE Cars
SQL-anvisning. information_schema
er en tabel, som gemmer tekniske oplysninger om vores tabeller.
mysql> ALTER TABLE Cars ENGINE='MyISAM';
Denne SQL-anvisning ændrer lagringsmotoren for Cars
-tabellen til MyISAM.
mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| MyISAM |+--------+1 row in set (0,00 sec)
Nu er tabellens lagringsmotor MyISAM.
I denne del af MySQL-vejledningen har vi dækket storage engines.