Krótkie podsumowanie:
(tylko moje opinie)
- na adres e-mail -
VARCHAR(255)
- o nazwę użytkownika -
VARCHAR(100)
lub VARCHAR(255)
- dla id_username - wykorzystać
INT
(chyba planujesz ponad 2 miliardy użytkowników w twoim systemie)
- numery telefonów -
INT
lub VARCHAR
a może CHAR
(zależy czy chcesz zachować formatowanie)
- posty -
TEXT
- daktyle -
DATE
lub DATETIME
(na pewno to razy na takie rzeczy jak wiadomości lub e-maile)
- pieniędzy -
DECIMAL(11,2)
- misc - patrz niżej
miarę używając InnoDB ponieważ VARCHAR
powinien być szybszy, nie martwiłbym się o to ani o prędkość w ogóle. Użyj InnoDB, ponieważ musisz wykonać transakcje i/lub chcesz użyć ograniczeń klucza obcego (FK) dla integralności danych. Ponadto InnoDB używa blokowania na poziomie wiersza, podczas gdy MyISAM używa tylko blokowania na poziomie tabeli. Dlatego InnoDB może obsługiwać wyższe poziomy współbieżności lepiej niż MyISAM.Użyj MyISAM do używania pełnotekstowych indeksów i nieco mniej narzutów.
Co ważniejsze dla prędkości niż typ silnika: umieść indeksy na kolumnach, które trzeba szybko przeszukać. Zawsze umieszczaj indeksy na twoich kolumnach ID/PK, takich jak id_username, o których wspomniałem.
Więcej szczegółów:
Oto kilka pytań na temat typów danych MySQL i projektowania baz danych (ostrzeżenia, ponad prosiłeś):
i kilka pytań na kiedy używać silnik InnoDB:
wystarczy użyć tinyint
prawie wszystko (poważnie).
Edycja - Jak przechowywać „posty:”
Poniżej znajdują się linki o więcej szczegółów, ale tutaj jest krótka wersja. Do przechowywania "postów" potrzebujesz miejsca na długi ciąg tekstowy. CHAR
maksymalna długość to 255, więc nie jest to opcja, i oczywiście CHAR
będzie marnować nieużywane znaki kontra VARCHAR
, który jest zmiennej długości CHAR
.
Przed MySQL 5.0.3, VARCHAR
maksymalna długość to 255, więc pozostanie Ci TEXT
. Jednak w nowszych wersjach MySQL można użyć VARCHAR
lub TEXT
. Wybór sprowadza się do preferencji, ale istnieje kilka różnic. VARCHAR
i TEXT
maksymalna długość wynosi teraz 65 535, ale możesz ustawić własną wartość maksymalną na VARCHAR
. Załóżmy, że uważasz, że Twoje posty będą miały tylko 2000 maks., Możesz ustawić VARCHAR(2000)
. Jeśli przekroczysz limit, możesz później ustawić tabelę i ustawić ją na VARCHAR(3000)
. Z drugiej strony, TEXT
faktycznie przechowuje swoje dane w postaci BLOB
(1). Słyszałem, że mogą występować różnice w wydajności między VARCHAR
i TEXT
, ale nie widziałem żadnego dowodu, więc możesz chcieć przyjrzeć się temu więcej, ale zawsze możesz zmienić ten drobny szczegół w przyszłości.
Co ważniejsze, wyszukiwanie tej kolumny "post" przy użyciu indeksu pełnotekstowego zamiast LIKE
byłoby znacznie szybsze (2). Jednakże, musisz użyć silnika MyISAM, aby użyć pełnotekstowego indeksu, ponieważ InnoDB go nie obsługuje. W bazie danych MySQL możesz mieć heterogeniczną mieszankę silników dla każdego stołu, więc po prostu musisz ustawić tabelę "posty" za pomocą MyISAM. Jeśli jednak bezwzględnie potrzebujesz "postów" do korzystania z InnoDB (w przypadku transakcji), skonfiguruj wyzwalacz do aktualizacji kopii MyISAM twojego "postu" tabeli i użyj kopii MyISAM dla wszystkich wyszukiwań pełnotekstowych.
Zobacz kilka przydatnych cytatów.
(3) „Wartości w kolumnach VARCHAR są zmiennej długości struny. Długość może być określona jako wartość od 0 do 255 przed MySQL 5.0.3 i od 0 do 65 535 w wersji 5.0.3 i nowszych.
Przed MySQL 5.0.3, jeśli potrzebujesz danych typ, dla których obowiązuje spływu nie usunięty, należy rozważyć użycie BLOB lub tekst typu.
Po zapisaniu wartości CHAR są one prawostronnie wypełnione spacjami do określonej długości . Gdy wartości CHAR są usunięte, końcowe spacje są usuwane .
Przed MySQL 5.0.3, końcowe spacje są usuwane z wartości, gdy są zapisane w kolumnie VARCHAR; to oznacza, że obowiązuje również są nieobecne z pobranych wartości „
Wreszcie, oto wielki post o zaletach i wadach VARCHAR kontra tekst mówi się również do kwestii wydajności..
dzięki colithium do poprawki. Nie wiem jak poradzić sobie z linkami haha. –
dodano znacznik mysql. –