Esiste un vantaggio in termini di prestazioni nell'utilizzo di enum in situazioni in cui vi sono solo 5-10 diversi valori possibili per un campo? se no, qual è il vantaggio?MySQL Enum vantaggio di prestazioni?
risposta
C'è una grande prestazione pena all'utilizzo ENUM
per operazioni quali:
Query l'elenco dei valori consentiti nel
ENUM
, ad esempio, per compilare un menu a discesa. È necessario interrogare il tipo di dati daINFORMATION_SCHEMA
e analizzare l'elenco da un campo BLOB restituito.Modificare l'insieme di valori consentiti. Richiede una dichiarazione
ALTER TABLE
, che blocca la tabella e può effettuare una ristrutturazione.
Non sono un fan di MySQL ENUM
. Preferisco usare le tabelle di ricerca. Vedere anche la mia risposta a "How to handle enumerations without enum fields in a database?"
No, vedere un confronto here
Il vantaggio sta nella leggibilità del codice.
In base all'articolo che è stato collegato, c'è un vantaggio in termini di prestazioni nell'utilizzo di ENUM a condizione che non vengano modificati stati possibili. –
Gli ENUM sono rappresentati internamente da 1 o 2 byte, a seconda del numero di valori. Se le stringhe che stai memorizzando sono più grandi di 2 byte e raramente cambiano, allora ENUM è la strada da percorrere. Il confronto sarà più veloce con un enum e occupano meno spazio sul disco, il che a sua volta può portare a tempi di ricerca più rapidi.
Lo svantaggio è che le enumerazioni sono meno flessibili quando si tratta di aggiungere/rimuovere valori.
Non sono sicuro di quale versione di MySQL si stesse riferendo. Ma dal 5.0, la dimensione del tipo enum è di 1 o 2 byte dipende dal numero di valori possibili secondo il manuale: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html Since ci sono solo 5-10 valori possibili, la dimensione dovrebbe essere 1 byte – Lacek
@Lacek Hai ragione! Cambierò la risposta da 16 bit a 1 o 2 byte –
In questo articolo http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ Fernando esamina le prestazioni di tipo Enum per le query.
Il risultato è che mentre si utilizza ENUM potrebbe sembrare un po 'meno elegante dal punto di vista del progetto (se il valore di ENUM cambia talvolta), il guadagno di prestazioni è evidente per i set di dati di grandi dimensioni. Vedi il suo articolo per i dettagli. Sei d'accordo?
- 1. Enum e prestazioni
- 2. Vantaggio dell'utilizzo di Views in MySQL
- 3. MySQL enum vs. set
- 4. MySQL enum con hibernate
- 5. Mysql Seleziona valori enum
- 6. PHP: qual è il vantaggio di spl_autoload_register? Prestazioni di include
- 7. problema di prestazioni MySQL 5.7
- 8. PDO in prestazioni mysql
- 9. MySql visualizza le prestazioni
- 10. Prestazioni delle funzioni MySql Xml?
- 11. Hibernate, MySQL, Enum e NULL
- 12. Memorizzazione di enum nel database MySQL
- 13. enum Java a mysql enum nella dichiarazione preparata
- 14. Scarse prestazioni di INFORMATION_SCHEMA.key_column_usage in MySQL
- 15. Vantaggio e svantaggi di CardView
- 16. Sta usando mysql ENUM una cattiva soluzione architettonica?
- 17. Prestazioni in PDO/PHP/MySQL: transazione rispetto all'esecuzione diretta
- 18. Selezione MySQL basata sui valori ENUM
- 19. Rimozione valori enum dalla colonna mysql
- 20. MySQL Modifica una colonna valore ENUM
- 21. ORDINA DA "campo ENUM" in MYSQL
- 22. Enum all'interno di una enum
- 23. Esiste un vantaggio in termini di prestazioni nell'utilizzo di elenchi di lunghezza fissa in Dart?
- 24. Prestazioni MySQL vs SQL Server 2005/2008
- 25. Consigli per l'ottimizzazione delle prestazioni MySQL my.cnf
- 26. Quale query data mySQL ha prestazioni migliori?
- 27. Mysql: inserimento prestazioni INNODB vs MYISAM
- 28. Esiste un vantaggio in termini di prestazioni utilizzando readOnly nei criteri di ibernazione?
- 29. Miglioramento delle prestazioni e delle variabili MySQL
- 30. Vantaggio di winelib?
i miei valori enumerati sarebbero cose come dati demografici (W, B, A, H, O, U) Sesso (M, F, U) e Party (R, D, I, U) quelli non cambierebbero mai. in modo che possano essere sempre codificati nella logica della mia applicazione. Quindi, la ricerca per i valori di dropdown e l'alterazione della struttura non sono un grosso fattore. – gsueagle2008
"i miei valori enum ... non cambierebbero mai". Vorrei ** amare ** per ottenere alcune statistiche su quante volte quella dichiarazione è stata smentita. – benmarks
Mentre i punti elenco elencati sono veri, ENUM è ancora più veloce di JOIN, specialmente se si ordina da quella colonna. Per le colonne come il sesso con valori impostati che non cambiano, preferisco usare ENUM. Se esiste anche una possibilità remota che è necessario aggiungere o rimuovere i valori, andare con un JOIN o utilizzare un CHAR/VARCHAR/TINYINT e gestirli a livello di applicazione. Un'altra cosa ... MySQL non memorizza il valore reale nella colonna, solo un indice (INT), quindi si potrebbe anche usare la stringa di testo completo per mostrare agli utenti (es. Maschio invece di M) e salvare ulteriori codifica.;-) – Jabari