Alegerea tipurilor de date în MySQL

La crearea tabelelor în Mysql, definim tipurile de date și reguli suplimentare pentru coloane (dimensiunea, indici, constrângeri):

# Un exemplu de creare a unui tabel în Mysql

Nu avem nevoie de toate coloanele?

Pentru a începe, setați aplicația la câteva întrebări. Nu avem nevoie de toate coloanele? Probabil suficient pentru doar câteva? Eliminați orice boxe

Nu încerca să ghicească viitorul. Aproape garantat că se va schimba structura cu tabelul de timp. Stai numai pe datele de care este nevoie acum.

Care este versiunea scurtă a datelor?

Pune aceste întrebări la toate coloanele din tabel următor.

valorile NULL

O valoare NULL în Mysql - o valoare deosebită. Pentru a lucra cu ei au caracteristici speciale. Pentru prelucrarea lor are nevoie de logică suplimentară. O regulă bună este de a evita utilizarea acestei valori. În schimb, puteți utiliza valori null siruri de caractere sau de zerouri la numerele:

Valorile # NULL nu va fi folosit

numere întregi

Pentru toate coloanele numerice necesare pentru a calcula valoarea maximă. In Mysql exista 4 tipuri întregi:
  • TINYINT. 8 biți, un maxim de 127
  • SMALLINT. 16 biți, un maxim de 32676
  • INT. 32 biți, un maxim de 2 x 10 septembrie
  • BIGINT. 64 biți, un maxim de 9 x 18 brumărel

Imaginați-vă că utilizați tipul INT pentru coloana, care stochează vârsta utilizatorului. Apoi, după cum puteți pur și simplu de tip TINYINT. utilizați un 32-8 = 24 biți mai mult. Pentru fiecare rând. . Dacă aveți 10 de mii de utilizatori, ai cheltui în zadar: 24/8 * 10 000 = 30 KB. Dacă utilizatorul 10 milioane, apoi 30 MB. Alegeti tipul minim de date pe baza valorii maxime a coloanei.

Acesta nu poate fi atât de mult de a conduce, dar este important pentru memorie.

În cazul în care un număr negativ este irelevant pentru coloana, utilizați valorile nesemnate. Apoi, valoarea maximă va fi de două ori mai mult, dar minimul este zero:
  • TINYINT UNSIGNED. 8 biți, un maxim de 255
  • SMALLINT UNSIGNED. 16 biți, un maxim de 65 535
  • INT UNSIGNED. 32 biți, un maxim de 4 x 10 septembrie
  • BIGINT UNSIGNED. 64 biți, un maxim de 18 x 18 brumărel

Lungime Tipuri numerice

În Mysql, puteți specifica lungimea coloanei, după care specifică tipul numeric:

Aceasta nu are nici un efect asupra nici dimensiunea coloanei sau numărul maxim. Doar nu utilizați niciodată lungimea pentru tipurile numerice.

un număr mare

Pentru stocarea un număr foarte mare de precise Mysql oferă de a utiliza tipul ZECIMALă.

# Utilizarea ZECIMALĂ pentru neîntreg

În paranteză indică numărul de numărul total de cifre și numărul de după virgulă (poate fi zero). Deoarece procesoarele nu suportă operații matematice cu astfel de numere, Mysql face toate calculele de pe partea sa. Deci, este foarte lent.

FLOAT / DOUBLE

Spre deosebire de decimal. flotor este aproximative (magazine cu număr inexact). În același timp, procesorul este capabil de a lucra cu acest tip direct. În plus, FLOAT ocupă mai puțin spațiu decât un DECIMAL pentru a stoca aceleași valori. Utilizați FLOAT / DOUBLE în loc de ZECIMALă, în cazul în care nu aveți nevoie de un număr foarte precise

VARCHAR / CHAR

Când tastați rânduri selectarea, de asemenea, funcționează în mod normal scăzut. Evaluează lungimea maximă a șirului și a pus limita. tip CHAR - tipul de lungime fixă. Acest lucru înseamnă că pentru orice linie va aloca întotdeauna același număr de octeți:

# Coloana se va ocupa întotdeauna 2 octeți (chiar dacă este gol)

VARCHAR - tipul de lungime variabilă. Într-o astfel de coloană linie va ocupa exact lungimea lor (în octeți):

# Coloana se va lua de la 1 la 32 de octeți, în funcție de valoarea deosebită

Cu toate acestea, se va adăuga un alt Mysql 1 octet pentru a stoca lungimea șirului în sine. De asemenea, este în valoare de având în vedere că o astfel de actualizare șir poate fi o operațiune costisitoare (plină de fragmentare a datelor, astfel încât - încetinirea citire). Utilizați următoarea regulă: În cazul în care valorile din coloana text similar în lungime, pentru a alege un CHAR, în caz contrar - VARCHAR.

BLOB / TEXT

TEXT și BLOB tipuri diferă numai prin faptul că al doilea tip face codare de conversie Mysql (magazine, așa cum este). Nu folosiți tipul TEXT / BLOB pentru sortarea coloanelor

Mysql nu este în măsură să sortați de aceste valori, așa că folosește doar primele caractere max_sort_length. În mod similar, atunci când creați un index pentru această coloană, trebuie să specificați lungimea:

# Specificați lungimea coloanei pentru indexare

Greu de imaginat de ce doriți să coloane de index de text, pur și simplu nu o fac. Dacă doriți să utilizați posibilitatea de a crea un index pentru verificarea unicității, utilizați o coloană auxiliară pentru stocarea MD5 hash a textului:

# În coloana body_md5, puteți crea un index unic

Valorile rând poate fi una dintre valorile cunoscute anterior (de exemplu, lista țărilor). Dacă lista este fixă ​​(țări noi nu apar în fiecare zi), acesta va fi convenabil să se folosească de tip ENUM. Acesta vă permite să specificați o anumită listă de valori și le folosesc numai în rânduri de masă.

Avantajul acestui tip este că acesta înregistrează numărul de valori în loc de valorile din fiecare rând. Acest lucru oferă un imens spațiu de economii.

# Nu utilizați ENUM pentru valori dinamice

DATETIME / TIMESTAMP

Ambele formatul de dată poate stoca data și ora până la secunde. Cu toate acestea, există diferențe între ele:
  • DATETIME este de 8 octeți și poate stoca datele 1001-9999 an.
  • TIMESTAMP este de 4 octeți și poate stoca datele 1970-2038.

# Inițializează și actualizare automată TIMESTAMP coloană

În alte cazuri, utilizați DATETIME.

Versiunea DR; TL

  • Ștergeți coloanele inutile de circuite.
  • Reduceți lungimea coloanei la un nivel minim.
  • Evitați utilizarea de valori NULL.
  • Selectați minimul necesar tipuri numerice (TINYINT / SMALLINT în loc de INT).
  • Utilizați / ZECIMALă DOUBLE flotorului în locul numerelor aproximative.
  • Căutați linii CHAR de lungime aproximativ egală.
  • Pentru rândurile rămase - selectați VARCHAR.
  • Nu utilizați TEXT / BLOB pentru sortare și indexare.
  • Utilizați ENUM în loc de rânduri dintr-un set (de exemplu, lista țărilor).
  • Utilizați casetele de marcaj de timp evenimente de timp (de înregistrare, trimiterea de mesaje, etc.).
  • Pentru restul de date, utilizați DATETIME.
  • Citiți despre structura indecșilor și setările de reglaj Mysql.

Alegerea tipurilor de date în MySQL

materiale pe această temă

articole similare