¿Hay una ventaja en el rendimiento al usar enum en situaciones en las que solo hay 5-10 valores diferentes posibles para un campo? si no, ¿cuál es la ventaja?MySQL Enum ¿ventaja de rendimiento?
Respuesta
Hay un enorme rendimiento pena de a usar ENUM
para operaciones tales como:
Consulta la lista de valores permitidos en la
ENUM
, por ejemplo, para rellenar un menú desplegable. Debe consultar el tipo de datos desdeINFORMATION_SCHEMA
y analizar la lista de un campo BLOB devuelto.Altere el conjunto de valores permitidos. Requiere una declaración
ALTER TABLE
, que bloquea la tabla y puede hacer una reestructuración.
No soy fan de MySQL's ENUM
. Prefiero usar tablas de búsqueda. Véase también mi respuesta a "How to handle enumerations without enum fields in a database?"
No, ver una comparación here
La ventaja radica en la legibilidad del código.
De acuerdo con el artículo que vinculó, SI hay una ventaja de rendimiento al usar ENUM siempre que no esté alterando los posibles estados. –
Los ENUM están representados internamente por 1 o 2 bytes, según el número de valores. Si las cadenas que está almacenando son más grandes que 2 bytes y rara vez cambian, entonces un ENUM es el camino a seguir. La comparación será más rápida con una enumeración y ocuparán menos espacio en el disco, lo que a su vez puede generar tiempos de búsqueda más rápidos.
El inconveniente es que las enumeraciones son menos flexibles cuando se trata de agregar/eliminar valores.
No estoy seguro a qué versión de MySQL se refiere. Pero desde 5.0, el tamaño del tipo enum es de 1 o 2 bytes depende del número de valores posibles de acuerdo con el manual: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html Since solo hay de 5 a 10 valores posibles, el tamaño debe ser de 1 byte – Lacek
@Lacek ¡Tienes razón! Cambiaré la respuesta de 16 bits a 1 o 2 bytes –
En este artículo http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ Fernando investiga las interpretaciones de tipo Enum para consultas.
El resultado es que mientras se utiliza ENUM puede parecer un poco menos elegante desde el punto de vista del diseño (si su valor ENUM cambia algunas veces), la ganancia de rendimiento es obvia para grandes conjuntos de datos. Ver su artículo para más detalles. ¿Estás de acuerdo?
- 1. Enum y rendimiento
- 2. MySQL enum con hibernación
- 3. Mysql Seleccionar Enum
- 4. MySQL Enum uso correcto?
- 5. Ventaja de usar Views en MySQL
- 6. Rendimiento de MYSQL "IN"
- 7. Enum o Bool en mysql?
- 8. Java enum a mysql enum en la declaración preparada
- 9. CSV vs MySQL rendimiento
- 10. ¿Qué es el rendimiento ?, y ¿cuál es la ventaja de usar el rendimiento en asp.net?
- 11. MySQL rendimiento de las consultas dilema: enumeración vs tablas
- 12. ¿Enum enum en JNI?
- 13. tipo MySQL ENUM vs unir tablas
- 14. NÚMERO: Mysql que convierte Enum a Int
- 15. ¿Está usando mysql ENUM una mala solución arquitectónica?
- 16. rendimiento MySQL ¿ELIMINAR o ACTUALIZAR?
- 17. MySQL Query mejorar el rendimiento
- 18. Rendimiento y variables MySQL ajustando
- 19. Rendimiento en PDO/PHP/MySQL: transacción versus ejecución directa
- 20. PDO en el rendimiento de mysql
- 21. Mal rendimiento de INFORMATION_SCHEMA.key_column_usage en MySQL
- 22. MySQL my.cnf recomendaciones de ajuste del rendimiento
- 23. mysql - Creación de filas vs. columnas rendimiento
- 24. Lista de valores de Enum en menú desplegable php mysql
- 25. SQL Server equivalente al tipo de datos enum de MySQL?
- 26. ¿Cuál es la ventaja de Jikes RVM
- 27. Enum datatype versus tabla de datos en MySQL?
- 28. Eliminando los valores enum de la columna mysql
- 29. Ventaja de constructores genéricos
- 30. Ventaja de winelib?
mis valores enum serían cosas como datos demográficos (W, B, A, H, O, U) Sexo (M, F, U) y Parte (R, D, I, U) esos nunca cambiarían. para que siempre puedan codificarse en mi lógica de aplicación. Por lo tanto, consultar los valores desplegables y alterar la estructura no es tan importante. – gsueagle2008
"mis valores enum ... nunca cambiarían". Me encantaría ** obtener algunas estadísticas sobre cuántas veces se ha demostrado que esa afirmación es incorrecta. – benmarks
Si bien los puntos enumerados son verdaderos, ENUM es aún más rápido que UNIRSE, especialmente si está ordenando en esa columna. Para columnas como género con valores establecidos que no cambian, prefiero usar ENUM. Sin embargo, si existe la remota posibilidad de que necesite agregar o eliminar valores, vaya con UNIRSE o use CHAR/VARCHAR/TINYINT y adminístrelos en el nivel de la aplicación. Otra cosa ... MySQL no almacena el valor real en la columna, solo un índice (INT), por lo que también podría usar la cadena de texto para mostrar a los usuarios (es decir, Hombre en lugar de M) y ahorrar dinero adicional. codificación.;-) – Jabari