2012-05-10 10 views
9

Si sé que un valor almacenado en MySQL siempre tendrá exactamente 32 caracteres, ¿es mejor el rendimiento para hacer que la columna escriba CHAR en lugar de VARCHAR? ¿Cuál es exactamente la diferencia de rendimiento entre usar VARCHAR y CHAR?MYSQL VARCHAR o CHAR para cadena de longitud fija

Gracias.

+0

Relacionados http://stackoverflow.com/a/34802591/934739 –

Respuesta

7

Yo usaría CHAR.

Si es probable que busque en la columna, CHAR presenta una pequeña actualización de rendimiento sobre VARCHAR.

Como su tamaño de datos va a ser reparado, no hay inconveniente en usar CHAR, ya que un equivalente VARCHAR almacenará de uno a dos bytes como prefijo.

Referencia: MySQL CHAR vs VARCHAR

3

columnas VARCHAR use a one or two byte prefix to store the length:

En contraste con CHAR, VARCHAR valores se almacenan como una de un byte o de dos bytes de longitud de prefijo más datos. El prefijo de longitud indica la cantidad de bytes en el valor. Una columna utiliza un byte de longitud si los valores no requieren más de 255 bytes, dos bytes de longitud si los valores pueden requerir más de 255 bytes.

Por lo tanto, una columna VARCHAR será un poco más grande. Si sabes que siempre tendrá exactamente 32 caracteres, entonces CHAR parece razonable. En casi cualquier caso en el que no estés completamente seguro de la longitud, iría con VARCHAR.

7

La respuesta a la primera pregunta, "¿Es mejor rendimiento para que el CHAR tipo de columna VARCHAR en lugar de" ... es sí. Seguro.

Si SIEMPRE sabe que la longitud va a ser 32, entonces definitivamente debe usar CHAR. También se les dio

Varias buenas respuestas aquí: Why would I ever pick CHAR over VARCHAR in SQL?

0

Si la cadena siempre será de 32 caracteres (probablemente usted está teniendo un hash MD5) y luego ir por Char (32) siempre se puede ejecutar este script contra cualquier mesa y ver lo que MySQL tiene que decir

SELECT * FROM table PROCEDURE ANALYSE(); 

Esta analizará la totalidad de sus filas y darle algunas sugerencias. Funciona bien solo si tiene un número decente o filas en su mesa.

Cuestiones relacionadas