2010-08-23 12 views

Odpowiedz

22

Można użyć BIT(1), jak wspomniano w mysql 5.1 reference. Nie będę polecać, aby enum lub jako bit(1) potrzebował tylko 1 bit do przechowywania wartości boolowskiej, podczas gdy tinyint(1) potrzebuje 8 bitów.

+0

Szukam wydajności, a nie przestrzeni. Myślisz, że indeks bitowy jest szybszy niż tinyint czy enum key? – Wiliam

+1

Jeśli planujesz indeks w kolumnie takiej jak ta, możesz być rozczarowany. Różnicowanie na takiej kolumnie jest zwykle tak słabe, że pomimo obecności indeksu stosuje się pełne skanowanie tabeli. –

+0

@ Brian Hooper: Nie rozumiem, co mówisz, przepraszam – Wiliam

1

Proponuję, aby ENUM było lepsze, ponieważ wyjaśnia, czego się oczekuje; jeśli w jakikolwiek wymierny sposób obniży to wydajność, byłbym bardzo zaskoczony. Aby zrobić tinyint, ta praca wymagałaby sprawdzenia ograniczenia na kolumnie; żaden z silników magazynujących MySQL obecnie nie obsługuje tego.

+1

Każdemu, kto rozważa użycie wyrażenia "ENUM", należy przeczytać: http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/ i https: //dba.stackexchange. com/questions/6962/zalety-i-wady-by-używać-enum-vs-integer-typy – billynoah

3

Moje badania pokazują, że BIT (1) jest synonimem TINYINT (1) dla wersji MySQL przed 5.0.3.

Wersje MySQL po wersji 5.0.3 zmieniają typ danych BIT. Nie jest już synonimem TINYINT i jest jedynym typem danych, który pozwala przechowywać wszystko w mniej niż jednym bajcie.

Ten typ danych może być preferowany do używania TINYINT lub ENUM. Mam zamiar przetestować, aby zobaczyć, który z nich jest najszybszy, i wykorzystanie przestrzeni trzech z nich na moim blogu. Na dole znajduje się link, jeśli chcesz zobaczyć wyniki dotyczące rozmiaru i szybkości. Testbed: marne urządzenie klasy Pentium III z OpenBSD i MySQL. (Z wolniejszym pudłem dev dev można naprawdę poczuć skutki złego kodu, a także różnice między zapytaniami testowymi są bardziej widoczne.Alternatywnie, spróbuj użyć maszyny wirtualnej z zaledwie wystarczającą ilością przydzielonych zasobów.)

Oficjalna dokumentacja MySQL.

Baron Schwartz ma do powiedzenia na ten temat.

http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/

1

Enum w pewnym sensie daje "podpowiedź" dla deweloperów i programistów. Ale zazwyczaj lepiej jest programowo obsłużyć. Tak więc, czy jest to ENUM (0,1), BIT (1) ORAZ TINYINT (1), wszystko przy użyciu 1 bajtu, byłoby lepiej, w większości przypadków, obsługiwane po stronie klienta, zamiast wysyłania 2 w bitach (1) lub enum (0,1) do serwera, a następnie serwer zwróci błąd, który trzeba będzie obsłużyć w każdym razie - zużywa więcej zasobów (sieć + serwer CPU + procesor klienta x 2)

0 zwykle oznacza fałsz, 1 prawda.

Powiązane problemy