Który z nich jest lepszy, Tinyint z wartościami 0 i 1 lub ENUM 0,1 w tabelach MyISAM i MySQL 5.1?TINYINT kontra ENUM (0, 1) dla wartości logicznych w MySQL
Odpowiedz
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.
Szukam wydajności, a nie przestrzeni. Myślisz, że indeks bitowy jest szybszy niż tinyint czy enum key? – Wiliam
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. –
@ Brian Hooper: Nie rozumiem, co mówisz, przepraszam – Wiliam
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.
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
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.
- v5.1 - http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html
- v5.6 - http://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html
Baron Schwartz ma do powiedzenia na ten temat.
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.
- 1. Boolean vs tinyint (1) dla wartości logicznych w MySQL
- 2. Czy istnieje różnica w używaniu INT (1) kontra TINYINT (1) w MySQL?
- 3. mysql tinyint (1) względem tinyint (2) względem tinyint (3) w porównaniu z tinyint (4)
- 4. Sieć neuronowa 0 kontra -1
- 5. Dlaczego MySQL interpretuje wartość logiczną jako TINYINT (1) zamiast BIT (1)?
- 6. PDOstatement (MySQL): wstawienie wartości 0 do bitu (1) powoduje wyświetlenie 1 w tabeli
- 7. Wyliczanie MySQL kontra zestaw
- 8. dlaczego mysql konwertuje bool na tinyint (1) zamiast tego powinno być boolem w tabeli mysql
- 9. Jak pobrać wartość int, a nie boolean z kolumny TINYINT (1)?
- 10. Co oznacza typedef enum składniowa, jak "1 << 0"?
- 11. cel-c dekorator gettera dla wartości logicznych
- 12. Enum wartość 0 niespójność
- 13. Wybieranie MySQL na podstawie wartości ENUM
- 14. Zmiana wartości wartości ENUM MySQL, w całej tabeli
- 15. Jakie wartości należy stosować dla pola Mysql BOOL: TRUE/FALSE lub 1/0, dlaczego?
- 16. Zaleta wydajności MySQL Enum?
- 17. Zmiana (0, 1) na (0, 1) bez rozgałęzienia
- 18. Task.Yield() kontra Task.Delay (0)
- 19. Konwertuj między EnumSet i tablicą wartości logicznych
- 20. Redis kontra MySQL dla danych finansowych?
- 21. Dlaczego 0 i& 1 to 1, a 1 i& 0 to 0 w rubinach?
- 22. mapie pewne właściwości logicznych jako enum ustawiona w Hibernate
- 23. Entity Framework: mapowanie tinyint na boolean
- 24. Jak wybrać numer wartości typów ENUM w MySql?
- 25. Najlepszy sposób testowania wartości logicznych w Rspec
- 26. Doctrine 2: Użyj wartości 0 zamiast wartości zerowej dla relacji
- 27. MyFunction() kontra window.setTimeout ('MyFunction()', 0)?
- 28. Powróć podzbiór na podstawie listy wartości logicznych
- 29. dostać wiele sekcji wartości z mysql
- 30. Najlepszy typ danych do przechowywania 0, 1, wartości pustych
Co masz na myśli przez lepsze, szybsze, mniej pamięci, najszybszy dostęp, najszybsze wiersze zapisu. Twoje pytanie jest zbyt nieprecyzyjne, by odpowiedzieć poprawnie. –