Jak wybrać optymalny typ danych w bazach MySQL
Twórcy stron WWW zbyt często używają złych typów danych w swoich bazach danych. Mając na uwadze to, że zapytania do bazy zajmują najwięcej czasu w trakcie wykonywania skryptu, konieczne jest, aby baza danych i jej tabele były jak najlepiej zoptymalizowane w celu zapewnienia im jak największej wydajności, zwłaszcza w wysokowydajnych aplikacjach.
Bazę MySQL można najprościej zoptymalizować, wybierając poprawny, najlepszy, a więc najbardziej wydajny typ danych. Ale wielu konstruktorów zarówno baz MySQL, jak i innych ma czasem z tym problem. Ludzie niezajmujący się bazami danych, tacy jak programiści PHP, którzy są zmuszeni do użycia MySQL-a w swoich skryptach, bardzo często mylą się w wyborze typu danych.
Aby Wam pomóc zrozumieć dostępne typy danych i – miejmy nadzieję – używać ich poprawnie, przygotowałem opisy kilku najpopularniejszych – tych, których prawdopodobnie używacie najczęściej.
Ze znakiem czy bez znaku (SIGNED or UNSIGNED)?
Dla tych, którzy nie wiedzą, co oznacza, że liczba jest ze znakiem lub bez znaku, podaję krótkie wytłumaczenie:
„Liczby całkowite ze znakiem to takie, w których jeden bit jest przeznaczony na to, by oznaczyć, czy liczba jest ujemna czy nie. W typach bez znaku ten jeden bit nie jest zarezerwowany i liczba może być tylko dodatnia. Liczba INT ze znakiem (SIGNED) może więc przyjąć wartości pomiędzy -2,147,483,648 a 2,147,483,647, a bez znaku od zera do 4,294,967,295.
Jeśli nie będziesz używał liczb mniejszych od zera, powinieneś użyć typu UNSIGNED. Typ bez znaku również nadaje się bardziej na klucz podstawowy z autoinkrementacją w tabeli, ponieważ pozwala on na wprowadzenie większej liczby wierszy”.
Zbyt duże?
Powinieneś pomyśleć dokładnie przed tworzeniem pól. Jeśli masz tabelę użytkowników w małej witrynie internetowej, a klucz podstawowy ma typ INSIGNED INT, powinieneś zadać sobie pytanie, czy kiedykolwiek uzyskasz 4,294,967,295 użytkowników. Najbardziej prawdopodobną odpowiedzią jest „nie”. Musisz pomyśleć, ilu maksymalnie użytkowników będzie prawdopodobnie na Twojej stronie. Później wybierz prawidłowy typ danych numerycznych, który pokrywa się z Twoimi potrzebami. Stworzyłem tabelkę z typami danych numerycznych oraz ich minimalnymi i maksymalnymi wartościami:
|
Type |
Minimum |
Maximum |
|---|---|---|
| SIGNED TINYINT | -128 | 127 |
| UNSIGNED TINYINT | 0 | 255 |
| SIGNED SMALLINT | -32,768 | 32,767 |
| UNSIGNED SMALLINT | 0 | 65,535 |
| SIGNED MEDIUMINT | -8,388,608 | 8,388,607 |
| UNSIGNED MEDIUMINT | 0 | 16,777,215 |
| SIGNED INT | -2,147,483,648 | 2,147,483,647 |
| UNSIGNED INT | 0 | 4,294,967,295 |
| SIGNED BIGINT | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| UNSIGNED BIGINT | 0 | 18,446,744,073,709,551,615 |
Jaka jest różnica pomiędzy CHAR I VARCHAR?
Te dwa typy różnią się tym, że CHAR ma stałą długość, VARCHAR natomiast zmienną. Oznacza to, że CHAR ma zawsze tę samą wielkość i zajmuje tyle samo bajtów, podczas gdy VARCHAR się zmienia, a ponadto dodaje jeden dodatkowy bajt danych. Kiedy powinniśmy używać CHAR?
Do przechowywania haseł MD5, które mają zawsze 32 znaki (jeśli przechowujemy je w postaci szesnastkowej, lepiej przechowywać je jako 16 bajtów w polu BINARY).
Do przechowywania kodów paskowych o stałej długości.
A kiedy VARCHAR?
Do przechowywania adresów e-mailowych oraz imion i nazwisk ludzi, które różnią się długością.
Będziemy raczej stosowali VARCHAR do danych wprowadzanych przez użytkowników, ponieważ mogą się one różnić długością.
Przechowywanie jako liczby
Kiedy jest to możliwe, powinno się przechowywać dane jako liczby, ponieważ przeszukiwanie i sortowanie ich jest szybsze. Na przykład adres IP może zostać przechowany w formie:
123.123.123.123
dzięki użyciu VARCHAR(15). Jeśli zostanie on przetłumaczony na adres sieciowy protokołu IPv4 (dzięki użyciu np. funkcji ip2long() w PHP), może zostać zachowany jako:
2071690107
w polu SIGNED INT.
Wybór poprawnego typu daty/czasu
W MySQL-u istnieje pięć różnych typów daty i czasu:
- DATE,
- TIME,
- TIMESTAMP,
- DATETIME,
- YEAR.
DATE podaje tylko datę z dokładnością do jednego dnia. TIME reprezentuje czas (ale nie datę) wraz z sekundami. DATETIME to data i czas z dokładnością do pojedynczych sekund. TIMESTAMP to liczba sekund od EPOCH, a YEAR to po prostu rok.
YEAR wymaga jednego bajta, jest więc najlepszy do zapisu samego roku.
DATE i TIME to najmniejsze typy daty/czasu, które wymagają jedynie 3 bajtów.
TIMESTAMP wymaga 4 bajtów.
DATETIME wymaga 8 bajtów.
W prawie każdym przypadku najlepiej jest używać TIMESTAMP, który podaje datę i czas z dokładnością do sekundy.
źródło: http://making-the-web.com/2008/04/27/choosing-optimal-mysql-data-types/
Polecamy
Reklama
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Firefox 10 już jest. Wiele atrakcji dla programistów, użytkownicy raczej nic nie zauważą
9
Źle się dzieje z Chrome, ze stabilnością coraz gorzej. Gdzie się podziała słynna izolacja procesów?
26
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Debata w sprawie ACTA: internauci spodziewali się chyba czegoś innego
13
Nowa polityka prywatności Google'a już za miesiąc wejdzie w życie. Mamy się czego bać?
16
PHP 5.3.9 nie pozwoli hakerom zawiesić serwera. Pozwoli za to przejąć nad nim kontrolę
28
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
[Aktualizacja] Facebook zablokował Demotywatory.pl. W czym zawiniły?
36
FBI zamknęło Megaupload. Anonimowi dali się sprowokować. Teraz ich akcja uzasadni potrzebę SOPA?
17
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
Rząd Tuska zablokował dostęp do tańszych leków z internetowych aptek
61
„Donald matole, twój rząd dopadną kibole” – hakerska elita przyłącza się do walki z ACTA
23
Społeczność
WebDev Z tego wynika, że zmienią się tylko serwery z którymi przeglądarka łączy...
agilob Ale folder bez nazwy się da założyć :P
zetesha Apple nie zrezygnował z PPC całkiem ponieważ posiada P.A. Semi, która to...
pablo1919191 Thunderbolt to jest technolgia intela wiec skora appel wpakowal jako...
BartekBb Już wiem skąd kopiujecie artykuły, bo zrobiliście ten sam błąd co na...
Marr moglibyście się zdecydować. W newsach podajecie, że systemy wymiany (czyli...
setXYZ I jeszcze warto poczytać co o tym myśli sam MS http://webhosting.pl/Koniec...
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
- Marek: problem z menu (2)
- Marek: Własne checkboxy w HTML,CSS (1)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |









#1 jacek 2008-07-07 11:39:51 0
None
#2 zyczliwy 2008-07-07 11:39:51 0
None
#3 dAREuS 2008-07-07 11:39:51 0
None
#4 mario 2008-07-07 11:39:51 0
None
#5 ktosik 2008-07-07 11:39:51 0
None
#6 Blaze® 2008-08-04 23:54:12 0
None
#7 Admin 2009-12-02 23:16:21 0
IP: 89.72.58.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
#8 d3uter 2011-02-23 12:12:37 0
IP: 89.79.99.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13