Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 174 Pomógł: 0 Dołączył: 24.04.2009 Ostrzeżenie: (30%)
|
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? |
|
|
|
![]() |
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. |
|
|
|
mperlam [MySQL]Jaki typ danych dla bazy 18.01.2011, 17:51:17
nospor CytatID (UNSIGNED int(11 czy bez wartości max?))11... 18.01.2011, 17:55:54
Crozin 1. Typ całkowity (INTEGER) i jego pochodne nie maj... 18.01.2011, 18:00:15
mperlam Dzięki. W takim razie czemu służy ta wartość? Po c... 18.01.2011, 18:02:50
Crozin CytatDzięki. W takim razie czemu służy ta wartość?... 18.01.2011, 18:09:35
mperlam Ok, chciałbym jeszcze się dowiedzieć dlaczego stos... 18.01.2011, 18:20:10
nospor bo do bazy zamiast wkladac 9 bedziesz wkladal ... 18.01.2011, 19:03:43
mperlam W przyszłości chcę mogę zmienić nazwy/rozbudować r... 18.01.2011, 19:09:53
nospor Cytat@nospor: Enum jest wydajniejsze z prostej, je... 18.01.2011, 20:16:05
wookieb Cytat(thek @ 18.01.2011, 20:13:28 ) @... 18.01.2011, 20:16:58
Crozin @thek: Super, że napisałeś mały wywód, ale... nij... 18.01.2011, 20:28:11
thek @Wookieb: nie chodzi mi o numer index. Doświadczal... 18.01.2011, 23:31:45
wookieb Cytat(thek @ 18.01.2011, 23:31:45 ) @... 18.01.2011, 23:48:42
Ulysess a czy nie lepszym sposobem jest zrobienie w głowne... 19.01.2011, 12:25:18
wookieb Cytat(Ulysess @ 19.01.2011, 12:25:18 ... 19.01.2011, 12:29:55
Crozin Co do UNSIGNED: http://en.wikipedia.org/wiki/Signe... 19.01.2011, 12:36:32 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 17:11 |