Czy korzystanie z funkcji wyliczania jest wydajniejsze w sytuacjach, gdy istnieje tylko 5-10 różnych możliwych wartości dla pola? jeśli nie, jaka jest korzyść?Zaleta wydajności MySQL Enum?
Odpowiedz
Istnieje ogromna wydajność kara użyciem ENUM
dla operacji takich jak:
zapytań na liście dozwolonych wartości w
ENUM
, na przykład do wypełnienia menu rozwijanego. Musisz zapytać o typ danych odINFORMATION_SCHEMA
i przeanalizować listę z zwróconego pola BLOB.Zmienić zestaw dozwolonych wartości. Wymaga instrukcji
ALTER TABLE
, która blokuje tabelę i może wykonać restrukturyzację.
Nie jestem fanem MySQL's ENUM
. Wolę korzystać z tabel odnośników. Zobacz także moją odpowiedź na "How to handle enumerations without enum fields in a database?"
Nie patrz porównanie here
Zaletą leży w czytelności kodu.
Według artykułu, który łączyłeś, JEST korzyścią wynikającą ze stosowania ENUM, o ile nie zmieniasz możliwych stanów. –
ENUM są reprezentowane wewnętrznie 1 lub 2 bajtami, w zależności od liczby wartości. Jeśli przechowywane łańcuchy mają rozmiar większy niż 2 bajty i rzadko się zmieniają, to należy wybrać opcję ENUM. Porównanie będzie szybsze dzięki enum i zajmą mniej miejsca na dysku, co z kolei może prowadzić do szybszego wyszukiwania.
Wadą jest to, że wyliczenia są mniej elastyczne, jeśli chodzi o dodawanie/usuwanie wartości.
Nie jestem pewien, której wersji MySQL miałeś na myśli. Ale od wersji 5.0 rozmiar typu wyliczeniowego wynosi 1 lub 2 bajty w zależności od liczby możliwych wartości zgodnie z instrukcją: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html istnieje tylko 5 do 10 możliwych wartości, rozmiar powinien wynosić 1 bajt – Lacek
@Lacek Masz rację! Zmienię odpowiedź z 16 bitów na 1 lub 2 bajty –
W tym artykule http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ Fernando przygląda się występom typu Enum dla zapytań.
Powoduje to, że podczas korzystania z ENUM może wydawać się nieco mniej elegancki z punktu widzenia projektu (jeśli wartość ENUM zmienia się czasami), wzrost wydajności jest oczywiste dla dużych zestawów danych. Zobacz jego artykuł, aby poznać szczegóły. Czy sie zgadzasz?
- 1. MySQL Zmiana kolumny ENUM wartość
- 2. Porady dotyczące optymalizacji wydajności MySQL InnoDB (wstawianie)?
- 3. poprawa wydajności pliku danych obciążenia mysql
- 4. ORDER BY "pole ENUM" w MYSQL
- 5. Tworzenie typu zmiennej ENUM w MySQL
- 6. MySQL wydajność kwerendy dylemat: enum vs tabelach
- 7. Wybieranie MySQL na podstawie wartości ENUM
- 8. Zaleta 64-bitowego MSBuild?
- 9. Zaleta korzystania z Object.create
- 10. Zaleta strzałek nad funkcjami
- 11. Jak poprawić porządek dzięki wydajności z połączeniami w mysql
- 12. Enum in enum
- 13. Zaleta/Wada MemoryStream.Position lub MemoryStream.Seek
- 14. Jaka jest zaleta "wyrażeń lambda"?
- 15. Jaka jest zaleta git lfs?
- 16. Zaleta drzew B + nad BST?
- 17. Enum of Enum jest NULL
- 18. PHP vs MySQL wydajności (jeśli funkcjonuje) w zapytaniu
- 19. Jak używać EXPLAIN do * przewidywania * wydajności zapytania MySQL?
- 20. Wyliczanie Java do mysql enum w przygotowanym oświadczeniu
- 21. Zmiana wartości wartości ENUM MySQL, w całej tabeli
- 22. Jak wybrać numer wartości typów ENUM w MySql?
- 23. TINYINT kontra ENUM (0, 1) dla wartości logicznych w MySQL
- 24. Czy SQL Server 2005 ma odpowiednik typu danych ENUM MySql?
- 25. Czy używanie mysql ENUM jest złym rozwiązaniem architektonicznym?
- 26. Common Lisp odpowiednik C enum
- 27. Jaka jest zaleta multimapy nad mapą wektorów?
- 28. Jaka jest zaleta posiadania sekcji .bss?
- 29. Jaka jest prawdziwa zaleta parametru typu upstream?
- 30. Jaka jest zaleta UnityContainer.Resolve nad Activator.CreateInstance?
moje wartości wyliczeniowe będą takie jak demografia (W, B, A, H, O, U) Płeć (M, F, U) i Impreza (R, D, I, U) te nigdy się nie zmieniły. więc zawsze mogą być mocno zakodowane w mojej logice aplikacji. Tak więc zapytanie o wartości rozwijane i zmiana struktury nie są aż tak istotne. – gsueagle2008
"moje wartości wyliczeniowe ... nigdy się nie zmienią". Chciałbym ** love **, aby uzyskać statystyki na temat tego, ile razy ta instrukcja została udowodniona źle. – benmarks
Podczas gdy podane punkty są prawdziwe, ENUM jest nadal szybsze niż JOINS, szczególnie jeśli zamawiasz w tej kolumnie. W przypadku kolumn takich jak płeć z ustawionymi wartościami, które się nie zmieniają, wolę używać ENUM. Jeśli istnieje nawet zdalna możliwość, że będziesz musiał dodać lub usunąć wartości, skorzystaj z JOIN lub użyj CHAR/VARCHAR/TINYINT i zarządzaj nimi na poziomie aplikacji. Jeszcze jedno ... MySQL nie przechowuje rzeczywistej wartości w kolumnie, tylko indeks (INT), więc równie dobrze możesz użyć pełnego tekstu do wyświetlenia użytkownikom (np. Male zamiast M) i zapisać dodatkowe kodowanie.;-) – Jabari