Krótkie podsumowanie:
(tylko moje opinie)
- dla adresu e-mail —
VARCHAR(255) - dla nazwy użytkownika —
VARCHAR(100)lubVARCHAR(255) - dla id_username - użyj
INT(chyba że planujesz ponad 2 miliardy użytkowników w swoim systemie) - numery telefonów —
INTlubVARCHARa możeCHAR(zależy od tego, czy chcesz przechowywać formatowanie) - posty —
TEXT - daty —
DATElubDATETIME(zdecydowanie uwzględnij czas na takie rzeczy jak posty lub e-maile) - pieniądze -
DECIMAL(11,2) - różne - patrz poniżej
Jeśli chodzi o używanie InnoDB, ponieważ VARCHAR ma być szybsza, nie przejmowałbym się tym, ani ogólnie szybkością. Użyj InnoDB, ponieważ musisz wykonywać transakcje i/lub chcesz użyć ograniczeń klucza obcego (FK) w celu zapewnienia integralności danych. Ponadto InnoDB używa blokowania na poziomie wiersza, podczas gdy MyISAM używa tylko blokowania na poziomie tabeli. Dlatego InnoDB lepiej radzi sobie z wyższymi poziomami współbieżności niż MyISAM. Użyj MyISAM, aby korzystać z indeksów pełnotekstowych i nieco mniej narzutu.
Co ważniejsze dla szybkości niż typ silnika:umieść indeksy w kolumnach, które chcesz szybko przeszukać. Zawsze umieszczaj indeksy w kolumnach ID/PK, takich jak nazwa_użytkownika, o której wspomniałem.
Więcej szczegółów:
Oto kilka pytań dotyczących typów danych MySQL i projektowania baz danych (ostrzeżenie, więcej niż prosiłeś):
I kilka pytań, kiedy używać silnika InnoDB:
Po prostu używam tinyint za prawie wszystko (poważnie).
Edytuj – Jak przechowywać „posty”:
Poniżej znajduje się kilka linków z dodatkowymi szczegółami, ale oto krótka wersja. Do przechowywania „postów” potrzebujesz miejsca na długi ciąg tekstowy. CHAR maksymalna długość to 255, więc to nie jest opcja i oczywiście CHAR zmarnowałby nieużywane znaki w porównaniu z VARCHAR , który ma zmienną długość CHAR .
Przed MySQL 5.0.3 VARCHAR maksymalna długość to 255, więc zostaniesz z TEXT . Jednak w nowszych wersjach MySQL możesz użyć VARCHAR lub TEXT . Wybór sprowadza się do preferencji, ale jest kilka różnic. VARCHAR i TEXT maksymalna długość wynosi teraz 65,535, ale możesz ustawić własną wartość maksymalną na VARCHAR . Powiedzmy, że myślisz, że Twoje posty będą musiały mieć maksymalnie 2000, możesz ustawić VARCHAR(2000) . Jeśli za każdym razem osiągniesz limit, możesz ALTER później stół i wrzuć go do VARCHAR(3000) . Z drugiej strony TEXT faktycznie przechowuje swoje dane w 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 dokładniej, ale zawsze możesz zmienić ten drobny szczegół w przyszłości.
Co ważniejsze, przeszukiwanie tej kolumny „post” przy użyciu indeksu pełnotekstowego zamiast LIKE byłoby znacznie szybsze (2). Jednak musisz użyć silnika MyISAM, aby użyć indeksu pełnotekstowego, ponieważ InnoDB go nie obsługuje . W bazie danych MySQL możesz mieć heterogeniczną mieszankę silników dla każdej tabeli, więc wystarczy, że Twoja tabela „posts” będzie używała MyISAM. Jeśli jednak absolutnie potrzebujesz „postów”, aby korzystać z InnoDB (dla transakcji), skonfiguruj wyzwalacz, aby zaktualizować kopię MyISAM twojej tabeli „posts” i użyj kopii MyISAM do wszystkich wyszukiwań pełnotekstowych.
Patrz na dole kilka przydatnych cytatów.
Na koniec, oto świetny post o zaletach i wadach VARCHAR kontra TEXT. Odnosi się to również do problemu z wydajnością: