Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Jaki typ danych dla bazy
mperlam
post
Post #1





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 24.04.2009

Ostrzeżenie: (30%)
XX---


Cześć. Mam mały dylemat jak stworzyć bazę danych aby była ona jak najbardziej optymalna. Chce zrobić takie pola:

ID (UNSIGNED int(11 czy bez wartości max?))
login (varchar (z wartością w nawiasie lepiej czy nie?))
pass (char(32))
level (tinyint(1))

Prędzej będzie jeszcze mail ale pomijam ponieważ chodzi o samą zasadę. Czy umieszczenie w nawiasie maksymalnej wielkości coś daje? (chodzi o wielkość i szybkość bazy) Czy raczej to bez różnicy? Jeżeli tak to jakie wartości wystarczą dla mail oraz login?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@nospor: Enum jest wydajniejsze z prostej, jednej, przyczyny. Nie jest to jawnie napisane nigdzie, ale zauważyłem że enum jest nie tylko polem, ale i jednocześnie indeksem. Masz więc 2 w 1 (IMG:style_emoticons/default/smile.gif) Sprawdź sobie dając nawet jako enum liczby. Typ wyliczeniowy powinien być szybszy nawet od tinyint ale podobny wydajnościowy jeśli na tinyint założysz indeks (IMG:style_emoticons/default/winksmiley.jpg)

@Crozin: Varchar jest ciut mniej wydajny niż char, ponieważ baza musi zawsze przeliczyć gdzie jest koniec danej kolumny. Char nie ma tego problemu - zawsze następna kolumna jest po x znakach. Przy varchar może być od 0 do maksymalnie określonej. Stąd pod kątem wydajności jako pierwsze nie powinny być varchar i text, ale int, char i inne z ściśle precyzyjną długością. Dzięki temu dostęp do tych kolumn w bazie jest szybszy. Jeśli ustawi się 5 intów po kolei a potem varchar oraz text to podczas operacji odczytu, dostęp do nich będzie nieco szybszy niż miały by inty być z text i varchar przemieszane. Baza nie musi wiedzieć gdzie się kończy pole varchar lub text by znaleźć, gdzie leży dokładnie następna kolumna jeśli zachowasz porządek i kolumny o stłej długości są na samym początku. Baza wie, że int ma x bajtów, float y bajtów i od razu skacze we właściwe miejsca. Zmienna długość sprawia, że baza musi najpierw ją poznać, bo dla każdego rekordu może początek następnej kolumny być gdziekolwiek. Stąd choćby jeśli zakładasz pole o nazwie hash i wiesz, że będzie ono zawsze 32 znakowe (tak ma md5) to używasz char(32) a nie varchar(32) bo ma to wpływ na szybkość dostępu do następnej kolumny za tym polem. To są już głupoty i ne każdy mus o tym wiedzieć, ale podczas optymalizacji dostępu la dużych i obciążonych serwisów takie coś jak kolejność kolumn staje się istotne.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 18:35