A választás az adattípusok mysql

Amikor létrehoz táblákat Mysql, definiáljuk adattípusok és további szabályokat oszlopok (méret, indexek, korlátok):

# Egy példa létrehoz egy táblázatot Mysql

Szükség van az összes oszlopot?

A kezdéshez állítsa be az alkalmazás egy pár kérdést. Szükség van az összes oszlopot? Valószínűleg elég csak egy pár? Vegye ki a hangsugárzó

Ne próbálja meg kitalálni a jövőben. Szinte biztos, hogy meg fog változni a szerkezet a menetrend. Maradjon csak az adatokat, hogy szükség van most.

Mi a rövid változata az adatokat?

Ezeket a kérdéseket, hogy az összes oszlopot a következő táblázatban.

NULL értékeket

A NULL érték Mysql - különleges értéket. Velük dolgozni különleges tulajdonságokkal. Való feldolgozása szüksége további logika. Egy jó ökölszabály, hogy elkerüljék az ezzel értéket. Ehelyett, akkor null értékek húrok vagy nullát a számok:

# NULL értékek nem használhatók

egészek

Minden numerikus oszlop kiszámításához szükséges a maximális értéket. MySQL van 4 egész szám típusok:
  • Tinyint. 8-bites, legfeljebb 127
  • Smallint. 16 bit, legfeljebb 32.676
  • INT. 32 bit, maximum 2 x 10 szeptember
  • BIGINT. 64 bit, maximum 9 x 18 okt

Képzeld el, hogy az INT típusú oszlop, amely tárolja a felhasználó korát. Aztán, ahogy akkor egyszerűen írja tinyint. használja a 32-8 = 24 kicsit. Minden egyes sorban. . Ha van 10 ezer felhasználó, akkor fordítsuk hiába: 24/8 * 10 000 = 30 KB. Ha a felhasználó 10 millió, majd 30 MB. Válassza a minimális adattípus alapján a maximális érték az oszlop.

Lehet, hogy nem annyira vezetni, de ez kritikus memóriát.

Ha egy negatív szám, nem releváns az oszlopban a előjel nélküli értékeket. Ezután a legnagyobb érték lesz kétszer annyi, de a minimális nulla:
  • Előjel nélküli tinyint. 8-bites, legfeljebb 255
  • Előjel nélküli smallint. 16-bites, legfeljebb 65 535
  • Unsigned int. 32 bit, legfeljebb 4 x 10 szeptember
  • Előjel nélküli BIGINT. 64 bit, legfeljebb 18 x 18 okt

Hossza numerikus típusok

A MySQL, megadhatja a hossza az oszlop meghatározása után a numerikus típus:

Ennek nincs hatása sem az oszlop méretét vagy a maximális számát. Csak soha nem használja hossza numerikus típusok.

nagyszámú

Tárolására igen nagyszámú pontos Mysql kínál kezelhető DECIMAL típusát.

# Használata DECIMÁLIS nem egész szám

Zárójelben számát jelzi számjegyek teljes száma, és az azt követő szám a tizedesvessző (lehet nulla). Mert a processzor nem támogatja a matematikai műveleteket, mint a számok, Mysql teszi a számításokat az oldalán. Tehát, ez nagyon lassú.

ÚSZÓ / DOUBLE

Ellentétben a DECIMAL. Úszós hozzávetőleges (üzletek pontatlan szám). Ugyanakkor, a processzor képes együttműködni az ilyen típusú közvetlenül. Ezen túlmenően, a FLOAT kevesebb helyet, mint decimális tárolni ugyanazokat az értékeket. Használja ÚSZÓ / dupla helyett decimális, ha nem igényelnek nagyon pontos számok

VARCHAR / CHAR

Amikor kiválasztja sorok írja is normálisan működik alacsony. Értékelje a maximális hosszát a húr, és tegye a limit. CHAR típus - a fajta rögzített hosszúságú. Ez azt jelenti, hogy minden sorban mindig kapja meg ugyanazt a bájtok számát:

# Oszlop mindig elfoglalni 2 bájt (akkor is, ha üres)

VARCHAR - típusú változó hosszúságú. Ilyen oszlop sorának fogja elfoglalni pontosan azok hossza (bájt):

# Oszlop kerül 1-32 bájt, attól függően, hogy az adott érték

Azonban Mysql lesz újabb 1 byte tárolja a string hossza is. Azt is érdemes figyelembe venni, hogy a frissítés, mint karaktersorozat lehet egy drága művelet (tele adatok töredezettsége, így - lassuló olvasás). Használja a következő szabály: Ha az értékek a szövegben oszlop hasonló hosszúságú, válasszon egy CHAR, különben - VARCHAR.

BLOB / TEXT

TEXT és BLOB típusok különböznek csak, hogy a második típus nem Mysql konverziós kódolást (üzletek, mint). Ne használja a TEXT / BLOB típusú rendezési oszlopok

Mysql nem képes rendezni ezeket az értékeket, így a rendszer csak az első max_sort_length karaktereket. Hasonlóképpen, amikor létrehoz egy indexet az oszlop, meg kell adnia a hossza:

# Adjon az oszlop hosszát az indexelés

Nehéz elképzelni, hogy miért akarsz index szöveges oszlop, csak ne csináld. Ha szeretné használni a lehetőséget, hogy hozzon létre egy indexet az egyediség ellenőrzésekor, használjon egy kiegészítő oszlop tárolására md5 hash-t a szöveg:

# A body_md5 oszlopban, akkor hozzon létre egy egyedi index

sorban értékek egyike lehet a korábban ismert értékek (például, az országok listáját). Ha a lista rögzített (új ország nem szerepel minden nap), akkor kényelmesen használható ENUM típusát. Ez lehetővé teszi, hogy meghatározza egy adott értékek listája, és csak akkor használja táblasorokban.

Az előnye, hogy ez a típus, hogy rögzíti az értékek számát értékek helyett az egyes sorokban. Ez egy hatalmas térben megtakarítás.

# Ne használja ENUM dinamikus értékek

DATETIME / TIMESTAMP

Mindkét dátum formátum képes tárolni a dátumot és az időt legfeljebb másodpercet. Azonban vannak különbségek közöttük:
  • DATETIME 8 bájt és tárolhatja dátumokat 1001-9999 évben.
  • TIMESTAMP 4 bájt és tárolhatja dátumok 1970-2038.

# Inicializálása és automatikus frissítési oszlop TIMESTAMP

Más esetekben használja DATETIME.

TL; DR változat

  • Törölje a felesleges oszlopok áramkörök.
  • Csökkentse az oszlop hossza minimális.
  • Kerüljük a NULL értékeket.
  • Válassza ki a szükséges minimális numerikus típusok (tinyint / smallint helyett INT).
  • Használja ÚSZÓ / dupla DECIMAL helyett hozzávetőleges számokat.
  • Keresés: CHAR vonalak körülbelül egyenlő hosszúságúak.
  • A fennmaradó sorok - válasszon VARCHAR.
  • Ne használja a TEXT / BLOB válogatási és indexelés.
  • Használja ENUM sorok helyett egy sor (például az országok listája).
  • A jelölőnégyzetek használatával timestamp események (regisztráció, üzenetküldés, stb.)
  • A többi dátumok használja DATETIME.
  • Olvassa el a szerkezet indexek és tuning beállításokat Mysql.

A választás az adattípusok mysql

anyagok a témában

Kapcsolódó cikkek