Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 13183|Antwoord: 0

[Bron] MyISAM is het verschil tussen de MySQL database storage engine en InnoDB

[Link kopiëren]
Geplaatst op 13-04-2020 09:53:49 | | |
Als het om MySQL gaat, is het moeilijk om MyISAM en InnoDB te begrijpen, twee van de bekendste en meest gebruikte MySQL-opslagengines. Vandaag zal ik het met je hebben over het verschil tussen MyISAM en InnoDB in MySQL...

Wat is MyISAM?

MyISAM is de standaard opslagengine voor het MySQL relationele databasebeheersysteem (vóór 5.5)。 Deze MySQL-tabelopslagstructuur breidt veel nuttige functies uit ten opzichte van de oude ISAM-code. In de nieuwe versie van MySQL vervangt de InnoDB-engine MyISAM grotendeels vanwege de voordelen qua transacties, referentieintegriteit en hogere gelijktijdigheid.
Elke MyISAM-tabel komt overeen met drie bestanden op de harde schijf. Alle drie de bestanden hebben dezelfde bestandsnaam, maar verschillende extensies om hun typedoel aan te geven: het .frm-bestand bevat de definitie van de tabel, maar dit bestand maakt geen deel uit van de MyISAM-engine, maar maakt deel uit van de server; .MYD bevat de gegevens van de tabel; .MYI is het indexbestand van de tabel.

Wat is InnoDB?

InnoDB is een andere opslagengine voor MySQL, en de nieuwe versie van de standaard die door MySQL AB is uitgebracht, is opgenomen in alle binaire installatiepakketten.vanaf 5.5 als standaard opslagengine。 De voordelen ten opzichte van andere opslagengines zijn de ondersteuning voor ACID-compatibele transacties (vergelijkbaar met PostgreSQL) en parameterintegriteit (d.w.z. ondersteuning voor vreemde sleutels).

Oracle Corporation nam Innobase over in oktober 2005. Innobase gebruikt dubbele authenticatieautorisatie. Het wordt gedistribueerd via GNU en stelt ook andere groepen die InnoDB in commerciële software willen integreren in staat een licentie te verkrijgen.

De populairste opslag-engines zijn MyISAM en InnoDB. De belangrijkste verschillen tussen MyISAM en InnoDB zijn prestaties en transactiecontrole. MyISAM is een uitgebreide implementatie van de vroege ISAM (Indexed Sequential Access Method, ISAM wordt niet langer ondersteund na MySQL 5.0), ISAM is ontworpen om situaties aan te kunnen waarin de leesfrequentie veel hoger is dan de schrijffrequentie, dus ISAM en latere MyISAM houden geen rekening met de ondersteuning van dingen, sluiten TPM uit, hebben geen transactierecords nodig, ISAM-query-efficiëntie is aanzienlijk en het geheugenverbruik is zeer klein.
MyISAM erft deze voordelen terwijl het de tijd bijhoudt met een groot aantal nuttige nieuwe functies en gerelateerde tools. Bijvoorbeeld, rekening houdend met gelijktijdigheidscontrole, zijn tabelniveau-vergrendelingen beschikbaar, en hoewel MyISAM zelf geen fouttolerantie ondersteunt, kan het worden gebruikt om te herstellen van storingen via myisamchk. En omdat MyISAM voor elke tabel zijn eigen onafhankelijke opslagbestanden gebruikt (MYD-databestand en MYI-indexbestand), is het zeer handig om te back-uppen en te herstellen (copy overwriting is voldoende), en ondersteunt het ook online herstel. In vergelijking met andere opslag-engines heeft MyISAM de meeste tools voor het controleren en repareren van tabellen. MyISAM-tabellen kunnen worden gecomprimeerd en ondersteunen fulltext search. Ze zijn niet transactieveilig en ondersteunen geen vreemde sleutels, dus als je applicatie geen transacties vereist en alleen basis CRUD-operaties afhandelt, is MyISAM de juiste keuze.
InnoDB is ontworpen voor situaties met hoge gelijktijdigheid lezen en schrijven, met gebruik van MVCC (Multi-Version Concurrency Control) en sloten op rijniveau om ACID-conforme transactieondersteuning te bieden. InnoDB ondersteunt integriteit van vreemde sleutelreferenties en heeft mogelijkheden voor foutherstel. Bovendien is de prestatie van InnoDB eigenlijk behoorlijk goed, vooral bij het verwerken van grote hoeveelheden data, in officiële termen: de CPU-efficiëntie van InnoDB is niet te vergelijken met andere schijfgebaseerde relationele database-opslagmotors. De back-up en het herstel van InnoDB zijn echter wat problematischer, tenzij je gebruikmaakt van de Multilit-tablespace-ondersteuning van versie 4.1 of later, want in tegenstelling tot MyISAM komen de databestanden van InnoDB niet onafhankelijk overeen met elke tabel. In plaats daarvan wordt de gedeelde tabelruimte gebruikt, en is de eenvoudige copy overwriting-methode niet geschikt voor hem, en de data moet worden hersteld nadat MYSQL is gestopt. Door per tabel tablespacesd te gebruiken, komt elke tabel overeen met een apart tablespace-bestand, is de situatie veel eenvoudiger. Het heeft dezelfde kenmerken als BDB-types, en ze ondersteunen ook vreemde sleutels. InnoDB-tabellen zijn snel en hebben rijkere functies dan BDB, dus het wordt aanbevolen als je een transactioneel veilige opslagengine nodig hebt.

Over het algemeen is InnoDB een goede keuze als er ondersteuning voor transacties nodig is en een hoge gelijktijdige lees- en schrijffrequentie heeft. BDB kan worden beschouwd als de frequentie van gelijktijdige lees- en schrijfacties niet hoog is, maar BDB zal niet langer worden ondersteund in MySQL 5.1 en latere versies. Deze optie is verdwenen

Standaard zijn InnoDB-transacties open (set autocommmit = 0), wat betekent dat elke keer dat een record wordt ingevoegd, de InnoDB-tabel het als een aparte transactie behandelt. Dus als we 10.000 records invoegen en de transactie niet sluiten, dan behandelt de InnoDB-typetabel het als 10.000 transacties, en de totale invoegtijd op dat moment is veel; op dat moment moeten we eerst de transactie uitschakelen en dan invoegen, dus de snelheid zal erg hoog zijn. Wat Heap en BDB betreft (Berkeley DB), relatief gezien is de penetratiegraad niet zo goed als bij de vorige twee, maar in sommige gevallen, De Heap storage engine is nog steeds zeer toepasbaar, die data in het geheugen opslaat en extreem snel is omdat er geen schijf-I/O-wachten zijn. Maar omdat het een geheugenopslagmotor is, verdwijnen alle aanpassingen zodra de server opnieuw is opgestart. Heap is een geweldige plek om BDB te gebruiken voor testen, omdat het MySQL's eerste transactioneel veilige opslagengine is. Gebouwd op basis van de Berkeley DB-databasebibliotheek is het ook transactioneel veilig, maar BDB is uiteraard niet zo populair als InnoDB, omdat de meeste opslagengines in MySQL die transacties ondersteunen ook op zoek zijn naar MVCC- of rij-niveau locking storage engines, terwijl BDB alleen Page-level Lock ondersteunt.

InnoDB-engine

InnoDB is een transactionele opslagengine die rollbacks ondersteunt en is ontworpen om high-performance services te leveren bij het verwerken van grote hoeveelheden data, en het zet bufferpools in het geheugen op tijdens runtime om data en indexen te bufferen.

Voordelen van de InnoDB-engine:

1. Ondersteuning voor transactieverwerking en ACID-transactiefuncties;

2. Vier isolatieniveaus van de SQL-standaard worden gerealiseerd;

3. Ondersteuning voor vergrendelingen op rijniveau en vreemde sleutelbeperkingen;

4. Je kunt transactielogs gebruiken voor gegevensherstel.

5. Het slotniveau is rijvergrendeling, wat geschikt is voor frequente tabelwijzigingen met hoge gelijktijdigheid, en hoge gelijktijdigheid is beter dan MyISAM. Het nadeel is dat het systeemverbruik groot is.

6. De index cachet niet alleen zichzelf, maar ook data, wat meer geheugen vereist dan MyISAM.

Nadelen van de InnoDB-engine:

Omdat het het aantal rijen in de tabel niet opslaat, wordt de hele tabel gescand bij gebruik van COUNT-statistieken.

MyISAM-motor

MyISAM is de standaardengine vóór MySQL 5.5.5 en is ontworpen om snel te lezen.

Voordelen van de MyISAM-engine:

1. Hoogpresterende lectuur;

2. Omdat het het aantal rijen in de tabel opslaat, wordt de hele tabel niet gescand bij gebruik van COUNT-statistieken;

Nadelen van de MyISAM-motor:

1. Het slotniveau is een tafelslot, en het voordeel van het horlogeslot is dat de bovenleiding klein is en het slot snel; De nadelen zijn dat de lock-granulariteit groot is, de kans op lock impulse hoog is en de gelijktijdigheidscapaciteit laag is, wat geschikt is voor query-gebaseerde diensten.

2. Deze engine ondersteunt geen transacties of vreemde sleutels.

3. INSERT- en UPDATE-operaties moeten de hele tabel vergrendelen;

4. Het slaat het aantal rijen in de tabel op, dus wanneer COUNT(*) uit de tabel wordt geselecteerd, hoeft het alleen de opgeslagen waarden direct te lezen zonder de hele tabel te scannen.

Toepasselijke scenario's

MyISAM is geschikt voor: (1) het uitvoeren van veel tellingberekeningen; (2) Zeldzame invoeging en zeer frequente zoekopdrachten; (3) Er is geen zaak.

InnoDB is geschikt voor: (1) hoge betrouwbaarheidseisen of transacties; (2) Tabelupdates en -zoekopdrachten zijn vrij frequent, en de kans op tabelvergrendeling is relatief groot.

Tabel vergelijking

EigenschappenMyISAMHeapBDBInnoDB
TransactiesNiet ondersteundNiet ondersteundIemand een warm hart toedragenIemand een warm hart toedragen
VergrendelingsgranulariteitTafelvergrendelingTafelvergrendelingPage Lock (pagina, 8KB)Slot
opslagSplitbestandenIn herinneringEén bestand per tabelTabelruimte
IsolatieniveaunietnietLees ToegewijdAllemaal
Draagbaar formaatzijnN.v.t.nietzijn
Bronvermeldingsvolledigheidnietnietnietzijn
Primaire gegevenssleutelnietnietzijnzijn
MySQL caches data recordsnietJaJaJa
bruikbaarheidVolledige versieVolledige versieMySQL-MaxVolledige versie


Enkele verschillen in details


1. InnoDB ondersteunt geen indexen van het FULLTEXT-type, wat al wordt ondersteund sinds MySQL 5.6 (experimenteel).

2. InnoDB slaat niet het specifieke aantal rijen van de tabel op, dat wil zeggen, bij het uitvoeren van select count() uit de tabel moet InnoDB de hele tabel scannen om te berekenen hoeveel rijen er zijn, maar MyISAM hoeft alleen het aantal opgeslagen rijen uit te lezen. Let op dat wanneer de count()-instructie een where-voorwaarde bevat, de bewerking voor beide tabellen hetzelfde is.

3. Voor velden van AUTO_INCREMENT type moet InnoDB een index bevatten met alleen dat veld, maar in de MyISAM-tabel kun je een gezamenlijke index maken met andere velden.

4. Bij DELETE FROM tabel zal InnoDB de tabel niet opnieuw aanmaken, maar regel voor regel verwijderen.

5. De LOAD TABLE FROM MASTER-operatie werkt niet voor InnoDB; de oplossing is eerst de InnoDB-tabel te wijzigen naar de MyISAM-tabel, de data te importeren en vervolgens te wijzigen naar de InnoDB-tabel, maar dit is niet van toepassing op de tabel die extra InnoDB-functies gebruikt (zoals vreemde sleutels).

6. Daarnaast is de rijvergrendeling van de InnoDB-tabel niet absoluut; als MySQL het bereik niet kan bepalen dat gescand moet worden bij het uitvoeren van een SQL-instructie, zal de InnoDB-tabel ook de hele tabel vergrendelen.

7. InnoDB ondersteunt geen volledige tekstindexering, terwijl MyISAM dat wel doet. Volledige tekstindexering verwijst naar het maken van een omgekeerde volgorde van elk woord in char, varchar en tekst (behalve stopwoorden). De volledige tekstindex van MyISAM is eigenlijk nutteloos, omdat deze geen Chinese woordsegmentatie ondersteunt en door de gebruiker na woordsegmentatie in de datatabel moet worden geschreven, en woorden met minder dan 4 Chinese tekens worden genegeerd zoals stopwoorden.





Vorig:Stel experimentele vragen samen
Volgend:SQL-instructie naar het Varchar-type
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com