senast ändrad 10 juli 2020
I det här kapitlet kommer vi att prata om MySQL-lagringsmotorer.
En lagringsmotor är en programvarumodul som ett databashanteringssystem använder för att skapa, läsa och uppdatera data från en databas. Det finns två typer av lagringsmotorer i MySQL: transaktionella och icke-transaktionella.
För MySQL 5.5 och senare är standardlagringsmotorn InnoDB.Standardlagringsmotorn för MySQL före version5.5 var MyISAM. Att välja rätt lagringsmotor är ett viktigt strategiskt beslut som kommer att påverka den framtida utvecklingen. I den här handledningen kommer vi att använda lagringsmotorerna MyISAM, InnoDB, Memory och CSV. Om du är ny i MySQL och studerar MySQL:s databashanteringssystem är detta inget större problem. Om du planerar en produktionsdatabas blir det mer komplicerat.
Lista över lagringsmotorer
MySQL stöder lagringsmotorer:
- InnoDB
- MyISAM
- Memory
- CSV
- Merge
- Archive
- Federated
- Blackhole
- Example
InnoDB är den mest använda lagringsmotorn med transaktionsstöd. Det är en ACID-kompatibel lagringsmotor. Den har stöd för låsning på radnivå, återhämtning vid krasch och konkurrencycontrol med flera versioner. Det är den enda motor som tillhandahåller referentiella integritetsbegränsningar för utländska nycklar. Oracle rekommenderar att InnoDB används för tabeller utom i specialiserade fall.
MyISAM är den ursprungliga lagringsmotorn. Det är en snabb lagringsmotor som inte stöder transaktioner. MyISAM tillhandahåller table-levellocking. Den används främst inom webb och datalagring.
Memory storage engine skapar tabeller i minnet. Det är den snabbaste motorn. Den tillhandahåller låsning på bordsnivå. Den har inte stöd för transaktioner.Memory storage engine är idealisk för att skapa tillfälliga tabeller eller snabba uppslag.Uppgifterna går förlorade när databasen startas om.
CSV lagrar uppgifter i CSV-filer. Den ger stor flexibilitet eftersom data i detta format lätt kan integreras i andra program.
Merge arbetar på underliggande MyISAM-tabeller. Sammanfogningstabeller gör det lättare att hantera stora datamängder. Den grupperar logiskt en serie identiska MyISAM-tabeller och refererar dem som ett enda objekt.Bra för datalagermiljöer.
Archive storage engine är optimerad för snabb insättning. Den komprimerar data när de läggs in. Den stöder inte transaktioner. Den är idealisk för att lagra och hämta stora mängder sällan refererade historiska, arkiverade data.
Svarta hål-lagringsmotorn tar emot men lagrar inte data. Hämtningar returnerar alltid en tom mängd. Funktionaliteten kan användas i distribuerad databasdesign där data automatiskt replikeras, men inte lagras lokalt. Den här lagringsmotorn kan användas för att utföra prestandatester eller andra tester.
Federerad lagringsmotor ger möjlighet att separera MySQL-servrar för att skapa en logisk databas från många fysiska servrar. förfrågningar på den lokala servern utförs automatiskt på de fjärrstyrda (federerade) tabellerna. Inga data lagras på de lokala tabellerna.Den är bra för distribuerade 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...
Kommandot SHOW ENGINES
visar alla tillgängliga motorer som servern har stöd för.
Välja rätt motor
Ingen lagringsmotor är idealisk för alla omständigheter. Vissa fungerar bäst under vissa förhållanden och fungerar sämre i andra situationer. Det finns kompromisser som måste beaktas. En säkrare lösning kräver mer resurser; den kan vara långsammare, ta mer CPU-tid och diskutrymme i anspråk. MySQL är mycket flexibel genom att den tillhandahåller flera olika lagringsmotorer. Några av dem, som Archive-motorn, är skapade för att användas i specifika situationer.
I vissa fall är svaret tydligt. När vi har att göra med vissa betalningssystem är vi tvungna att använda den säkraste lösningen. Vi har inte råd att förlora sådana känsliga uppgifter. InnoDB är den rätta lösningen. Om vi vill ha fullständig textsökning kan vi välja antingen MyISAM eller InnoDB… Endast InnoDB stöder referentiell integritetsbegränsning för utländska nycklar och om vi planerar att använda denna begränsning är valet tydligt.
Specificering och ändring av lagringsmotorer
Lagringsmotorn specificeras när tabellen skapas.
mysql> CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), -> Cost INTEGER) ENGINE='MyISAM';
Nyckelordet ENGINE
specificerar den lagringsmotor som används för just den här tabellen.
Om vi inte anger lagringsmotorn uttryckligen används standardlagringsmotorn. Före MySQL 5.5 var standardlagringsmotorn MyISAM. För MySQL 5.5 och senare är standardlagringsmotorn InnoDB.
Det är möjligt att migrera till en annan lagringsmotor. Observera att det kan ta lång tid att migrera en stor tabell. Vi kan också stöta på vissa problem när vi migrerar tabeller. Vissa funktioner kanske inte stöds i båda tabellerna.
mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| InnoDB |+--------+1 row in set (0,05 sec)
Detta SQL-meddelande tar reda på vilken lagringsmotor som används för en Cars
tabell i mydb
databas. Vi kan också använda SELECT CREATE TABLE Cars
SQL-anvisning. information_schema
är en tabell som lagrar teknisk information om våra tabeller.
mysql> ALTER TABLE Cars ENGINE='MyISAM';
Detta SQL-statement ändrar lagringsmotorn för Cars
-tabellen till 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 är lagringsmotorn för tabellen MyISAM.
I den här delen av MySQL-handledningen har vi behandlat lagringsmotorer.