Motoarele de stocare sunt componente MySQL care gestionează operațiile SQL pentru diferite tipuri de tabele. InnoDB
este motorul de stocare implicit și cel mai generalist, iar Oracle recomandă utilizarea acestuia pentru tabele, cu excepția cazurilor de utilizare specializată. (Instrucțiunea CREATE TABLE
din MySQL 8.0 creează în mod implicit tabele InnoDB
.)
Serverul MySQL utilizează o arhitectură de motoare de stocare conectabilă care permite motoarelor de stocare să fie încărcate și descărcate de pe un server MySQL în funcțiune.
Pentru a determina ce motoare de stocare suportă serverul dumneavoastră, utilizați instrucțiunea SHOW ENGINES
. Valoarea din coloana Support
indică dacă un motor poate fi utilizat. O valoare de YES
, NO
sau DEFAULT
indică faptul că un motor este disponibil, nu este disponibil sau este disponibil și este setat în prezent ca motor de stocare implicit.
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...
Acest capitol acoperă cazurile de utilizare a motoarelor de stocare MySQL cu scop special. El nu acoperă motorul de stocare implicit InnoDB
sau motorul de stocare NDB
, care sunt tratate în Capitolul 15, Motorul de stocare InnoDB și Capitolul 23, MySQL NDB Cluster 8.0. Pentru utilizatorii avansați, conține, de asemenea, o descriere a arhitecturii motorului de stocare conectabil (a se vedea secțiunea 16.11, „Prezentare generală a arhitecturii motorului de stocare MySQL”).
Pentru informații despre caracteristicile oferite în binarele comerciale ale MySQL Server, consultați MySQL Editions, pe site-ul web MySQL. Motoarele de stocare disponibile ar putea depinde de ediția de MySQL pe care o utilizați.
Pentru răspunsuri la întrebări frecvente despre motoarele de stocare MySQL, consultați secțiunea A.2, „Întrebări frecvente despre MySQL 8.0″: Motoare de stocare”.
Motoare de stocare suportate de MySQL 8.0
-
InnoDB
: Motorul de stocare implicit în MySQL 8.0.InnoDB
este un motor de stocare sigur pentru tranzacții (compatibil ACID) pentru MySQL care dispune de capabilități de commit, rollback și crash-recovery pentru a proteja datele utilizatorilor. Blocarea la nivel de rândInnoDB
(fără escaladarea la blocaje cu granularitate mai mare) și citirile consistente fără blocaj de tip Oracle sporesc concurența și performanța multiutilizator.InnoDB
stochează datele utilizatorului în indexuri grupate pentru a reduce I/O pentru interogări comune bazate pe chei primare. Pentru a menține integritatea datelor,InnoDB
suportă, de asemenea, constrângerile de integritate referențialăFOREIGN KEY
. Pentru mai multe informații despreInnoDB
, consultați Capitolul 15, The InnoDB Storage Engine (Motorul de stocare InnoDB). -
MyISAM
: Aceste tabele au o amprentă mică. Blocarea la nivel de tabel limitează performanța în sarcinile de lucru de citire/scriere, astfel încât este adesea utilizată în sarcinile de lucru de numai citire sau de citire în cea mai mare parte în configurațiile Web și de stocare de date. -
Memory
: Stochează toate datele în RAM, pentru acces rapid în mediile care necesită consultări rapide ale datelor necritice. Acest motor a fost cunoscut anterior sub numele de motorHEAP
. Cazurile sale de utilizare sunt din ce în ce mai puține;InnoDB
, cu zona sa de memorie de tip buffer pool, oferă o modalitate generală și durabilă de a păstra majoritatea sau toate datele în memorie, iarNDBCLUSTER
oferă căutări rapide de valori-cheie pentru seturi uriașe de date distribuite. -
CSV
: Tabelele sale sunt de fapt fișiere text cu valori separate prin virgulă. Tabelele CSV vă permit să importați sau să descărcați date în format CSV, pentru a face schimb de date cu scripturi și aplicații care citesc și scriu în același format. Deoarece tabelele CSV nu sunt indexate, de obicei păstrați datele în tabeleleInnoDB
în timpul funcționării normale și utilizați tabelele CSV numai în etapa de import sau export. -
Archive
: Aceste tabele compacte, neindexate, sunt destinate stocării și recuperării unor cantități mari de informații istorice, arhivate sau de audit de securitate la care se face rareori referire. -
Blackhole
: Motorul de stocare Blackhole acceptă, dar nu stochează date, similar cu dispozitivul Unix/dev/null
. Interogările returnează întotdeauna un set gol. Aceste tabele pot fi utilizate în configurații de replicare în care instrucțiunile DML sunt trimise către serverele de replică, dar serverul sursă nu păstrează propria copie a datelor. -
NDB
(cunoscută și sub numele deNDBCLUSTER
): Acest motor de baze de date grupate este deosebit de potrivit pentru aplicațiile care necesită cel mai înalt grad posibil de timp de funcționare și disponibilitate. -
Merge
: Permite unui DBA sau dezvoltator MySQL să grupeze în mod logic o serie de tabeleMyISAM
identice și să facă referire la ele ca la un singur obiect. Bun pentru mediile VLDB, cum ar fi depozitarea de date. -
Federated
: Oferă posibilitatea de a lega servere MySQL separate pentru a crea o bază de date logică din mai multe servere fizice. Foarte bun pentru mediile distribuite sau pentru mediile de data mart. -
Example
: Acest motor servește ca exemplu în codul sursă MySQL care ilustrează cum se poate începe scrierea unor noi motoare de stocare. Este în primul rând de interes pentru dezvoltatori. Motorul de stocare este un „stub” care nu face nimic. Puteți crea tabele cu acest motor, dar nu se pot stoca date în ele și nici nu pot fi recuperate din ele.
Nu sunteți restricționat să folosiți același motor de stocare pentru un întreg server sau schemă. Puteți specifica motorul de stocare pentru orice tabel. De exemplu, o aplicație ar putea utiliza în principal tabele InnoDB
, cu o tabelă CSV
pentru exportul de date către o foaie de calcul și câteva tabele MEMORY
pentru spații de lucru temporare.
Alegerea unui motor de stocare
Diferitele motoare de stocare furnizate cu MySQL sunt proiectate având în vedere diferite cazuri de utilizare. Tabelul următor oferă o prezentare generală a câtorva motoare de stocare furnizate cu MySQL, cu note clarificatoare în urma tabelului.
Tabelul 16.1 Rezumat al caracteristicilor motoarelor de stocare
Caracteristică | MyISAM | Memorie | InnoDB | Archive | NDB | ||||
---|---|---|---|---|---|---|---|---|---|
B-.tree indexes | Yes | Yes | Yes | No | No | No | |||
Backup/point-in- | Da | ||||||||
Indexuri clusterizate | Nu | Nu | Da | Nu | Da | Nu | Nu | ||
Date comprimate | Da (nota 2) | Nu | Da | Da | Da | Nu | |||
Cachete de date | Nu | Nu | Nu | Da | Da | Nu | Da | ||
Date criptate | Da (nota 3) | Da (nota 3) | Da (nota 3) | Da (nota 4) | Da (nota 3) | Da (nota 3) | |||
Suport pentru chei străine | Nu | Nu | Da | Nu | Da (nota 5) | ||||
Full…text search indexes | Da | Nu | Da (nota 6) | Nu | Nu | Nu | |||
Geospațiale suport pentru tipuri de date | Da | Nu | Da | Da | Da | Da | |||
Indexare geospațială suport | Da | Nu | Da (nota 7) | Nu | Nu | ||||
Indexări hash | Nu | Da | Nu (nota 8) | Nu | Da | ||||
Index caches | Da | Nu | Nu | Da | Nu | Nu | Da | ||
Granularitatea de blocare | Tablă | Tablă | Tablă | Rând | Tablă | Tablă | Row | Row | |
MVCC | No | No | No | Yes | Yes | No | No | ||
Suport pentru replicare (nota 1) | Da | Limitat (nota 9) | Da | Da | Da | Da | Da | Da | Da |
Limite de stocare | 256TB | RAM | 64TB | Nimic | 384EB | ||||
T-tree indexes | Nu | Nu | Nu | Nu | Da | ||||
Transactions | Nu | Nu | Nu | Da | Nu | Nu | Nu | Da | |
Actualizează statisticile pentru dicționarul de date | Da | Da | Da | Da | Da | Da | Da | Da | Da |
Notează:
:
1. Implementat în server, mai degrabă decât în motorul de stocare.
2. Tabelele MyISAM comprimate sunt acceptate numai atunci când se utilizează formatul de rânduri comprimate. Tabelele care utilizează formatul de rânduri comprimate cu MyISAM sunt numai pentru citire.
3. Implementat în server prin intermediul funcțiilor de criptare.
4. Implementat în server prin intermediul funcțiilor de criptare; în MySQL 5.7 și versiunile ulterioare, este acceptată criptarea datelor în repaus.
5. Suportul pentru chei străine este disponibil în MySQL Cluster NDB 7.3 și versiunile ulterioare.
6. Suportul pentru indici FULLTEXT este disponibil în MySQL 5.6 și versiunile ulterioare.
7. Suportul pentru indexarea geospațială este disponibil în MySQL 5.7 și versiunile ulterioare.
8. InnoDB utilizează în mod intern indici hash pentru caracteristica sa Adaptive Hash Index.
9. A se vedea discuția de mai târziu în această secțiune.
.