sql >> Base de Datos >  >> RDS >> Mysql

¿Existen desventajas en el uso de un varchar genérico (255) para todos los campos basados ​​en texto?

En almacenamiento, VARCHAR(255) es lo suficientemente inteligente como para almacenar solo la longitud que necesita en una fila determinada, a diferencia de CHAR(255) que siempre almacenaría 255 caracteres.

Pero dado que etiquetó esta pregunta con MySQL, mencionaré un consejo específico de MySQL:a medida que las filas se copian desde la capa del motor de almacenamiento a la capa SQL, VARCHAR los campos se convierten a CHAR para obtener la ventaja de trabajar con filas de ancho fijo. Entonces, las cadenas en la memoria se rellenan hasta la longitud máxima de su VARCHAR declarado columna.

Cuando su consulta genera implícitamente una tabla temporal, por ejemplo, al ordenar o GROUP BY , esto puede usar mucha memoria. Si usa mucho VARCHAR(255) campos para datos que no necesitan ser tan largos, esto puede hacer que la tabla temporal sea muy grande.

También le gustaría saber que este comportamiento de "relleno" significa que una cadena declarada con el conjunto de caracteres utf8 se rellena a tres bytes por carácter, incluso para las cadenas que almacena con contenido de un solo byte (por ejemplo, caracteres ascii o latin1). Y del mismo modo, el conjunto de caracteres utf8mb4 hace que la cadena se rellene a cuatro bytes por carácter en la memoria.

Entonces un VARCHAR(255) en utf8, almacenar una cadena corta como "Sin opinión" ocupa 11 bytes en el disco (diez caracteres de juego de caracteres inferior, más un byte de longitud), pero requiere 765 bytes en la memoria y, por lo tanto, en tablas temporales o resultados ordenados.

He ayudado a los usuarios de MySQL que, sin saberlo, crearon tablas temporales de 1,5 GB con frecuencia y llenaron su espacio en disco. Tenían muchos VARCHAR(255) columnas que en la práctica almacenaban cadenas muy cortas.

Es mejor definir la columna según el tipo de datos que desea almacenar. Tiene beneficios para hacer cumplir las restricciones relacionadas con la aplicación, como han mencionado otras personas. Pero tiene los beneficios físicos para evitar el desperdicio de memoria que describí anteriormente.

Por supuesto, es difícil saber cuál es la dirección postal más larga, razón por la cual muchas personas eligen un VARCHAR largo. eso es ciertamente más largo que cualquier dirección. Y 255 es habitual porque es la longitud máxima de un VARCHAR cuya longitud se puede codificar con un byte. También fue el máximo VARCHAR longitud en MySQL anterior a 5.0.