7.1. Tabelele MyISAM

Tipul de tabel MyISAM este implicit în versiunea MySQL 3.23. Se bazează pe codul ISAM și are o mulțime de completări utile în comparație.

Indexul este stocat într-un fișier .MYI (MYIndex), iar datele sunt stocate într-un fișier .MYD (MYData). Tabelele MyISAM pot fi verificate/reparate folosind utilitarul myisamchk. Consultați Secțiunea 4.4.6.7, „Utilizarea myisamchk pentru recuperarea în caz de dezastru”. Tabelele MyISAM pot fi comprimate folosind comanda myisampack, după care vor ocupa mult mai puțin spațiu. Consultați Secțiunea 4.7.4, „myisampack , Generator de tabel comprimat MySQL (numai citire)”.

Inovații pe care le are tipul MyISAM:

Un steag în fișierul MyISAM care indică dacă tabelul a fost închis corect sau nu. Dacă mysqld este pornit cu opțiunea --myisam-recover, tabelele MyISAM vor fi verificate și/sau restaurate automat la deschidere dacă tabelul a fost închis incorect.

Cu comanda INSERT, puteți insera noi rânduri într-un tabel care nu are blocuri libere în mijlocul fișierului de date, în timp ce alte fire citesc informații din tabel (inserție suprapusă). Un bloc gratuit poate fi obținut atunci când actualizați un rând cu o lungime dinamică, când mai multe date sunt înlocuite cu mai puține sau când rândurile sunt șterse. Când nu mai există blocuri libere, toate blocurile ulterioare vor fi din nou inserate ca suprapuse.

Suport pentru fișiere mari (63 de biți) pe fișiere/sisteme de operare care acceptă fișiere mari.

Toate datele sunt stocate cu primul octet scăzut. Acest lucru face ca datele să fie independente de sistemul de operare. Singura cerință este ca computerul să utilizeze numere întregi cu semne adăugate pe doi octeți (ca și în cazul tuturor computerelor dinultimii 20 de ani) și formatul IEEE în virgulă mobilă (utilizat și în marea majoritate a calculatoarelor comerciale). Singurele computere care pot să nu fie compatibile binar sunt sistemele încorporate (pentru că uneori folosesc procesoare speciale). La stocarea datelor cu primul octet cel mai puțin semnificativ, nu există nicio reducere a vitezei. În mod normal, octeții dintr-un rând de tabel nu sunt aliniați și nu există o mare diferență în ceea ce privește citirea octetului nealiniat - în secvență directă sau invers. De asemenea, timpul real de recuperare a valorii coloanei nu este critic în comparație cu timpul de execuție al restului codului.

Toate tastele numerice sunt stocate mai întâi cu octetul cel mai semnificativ pentru a face compresia indexului mai eficientă.

Gestionarea internă a unei coloane AUTO_INCREMENT. MyISAM îl actualizează automat când face comenzi INSERT / UPDATE. Valoarea AUTO_INCREMENT poate fi setată la zero cu instrucțiunea myisamchk. După aceea, coloana AUTO_INCREMENT va fi mai rapidă (cel puțin 10%) și numerele vechi nu vor fi reutilizate ca în cazul vechiului ISAM . Rețineți că atunci când AUTO_INCREMENT este setat la sfârșitul unei chei compuse, vechiul comportament este încă păstrat.

Când se inserează în ordine sortată (ca atunci când se folosește o coloană AUTO_INCREMENT), arborele cheilor va fi împărțit astfel încât nodul superior să conțină o singură cheie. Acest lucru reduce consumul de spațiu de memorie din arborele cheie.

Coloanele BLOB și TEXT pot fi indexate.

Valorile NULL sunt permise în coloanele de index. Aceștia iau 0-1 octeți per cheie.

În mod implicit, lungimea maximă a cheii este de 500 de octeți (această valoare poate fi modificată la recompilare). În cazurile în care cheile sunt mai mari de 250 de octeți, se folosesc numere mari pentru ele.dimensiunile blocului de cheie decât 1024 de octeți implicit.

În mod implicit, un tabel nu poate avea mai mult de 32 de chei. Această valoare poate fi mărită la 64 fără a recompila myisamchk.

myisamchk va marca tabelele ca verificate dacă sunt rulate cu opțiunea --update-state. myisamchk --fast va verifica numai tabele care nu au acest indicator.

myisamchk -a stochează statistici pentru părți ale unei chei (nu doar pentru chei întregi, ca în ISAM ).

Rândurile cu dimensiuni dinamice vor fi mai puțin fragmentate decât dacă amestecați ștergerile cu actualizările și inserările. Acest lucru se face prin potrivirea automată a blocurilor adiacente eliminate și a blocurilor de extindere dacă blocul următor este eliminat.

myisampack poate împacheta coloanele BLOB și VARCHAR.

Puteți pune fișierul de date și fișierul index în directoare diferite pentru a crește viteza (cu opțiunea DATA/INDEX DIRECTORY="path" pentru CREATE TABLE ). Vezi Secțiunea 6.5.3, „Sintaxa instrucțiunii CREATE TABLE”.

MyISAM acceptă, de asemenea, următoarele caracteristici care pot fi utilizate în MySQL în viitorul apropiat:

Suport pentru tipul VARCHAR; o coloană VARCHAR începe cu o lungime, care este stocată în 2 octeți.

Tabelele VARCHAR pot avea lungimi de înregistrare fixe sau dinamice.

VARCHAR și CHAR pot avea o lungime de până la 64 KB. Toate segmentele cheie au propriile definiții ale limbii. Acest lucru permite MySQL să specifice definiții de limbaj diferite pentru fiecare coloană.

Pentru UNIQUE, poate fi utilizat un index hash calculat. Acest lucru permite utilizarea UNIQUE pentru orice combinație de coloane din tabel (cu toate acestea, nu puteți căuta pe un index calculat de UNIQUE).

Vă rugăm să rețineți că fișierele indexutilizarea MyISAM este de obicei mult mai mică decât cea a ISAM. Aceasta înseamnă că MyISAM utilizează de obicei mai puține resurse de sistem decât ISAM, dar folosește mai mult CPU atunci când inserează date într-un index comprimat.

Următoarele opțiuni mysqld pot fi folosite pentru a schimba comportamentul tabelelor MyISAM. Vezi Secțiunea 4.5.6.4, „ARAȚI VARIABILELE”.