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.