2011-09-06 19 views
21

¿Cuál es la desventaja de usar un campo de tamaño de texto largo de MySQL cuando cada entrada encajará dentro de un campo de tamaño de texto medio?¿Cuál es la desventaja de usar un campo de tamaño largo de MySQL cuando cada entrada se ajustará dentro de un campo de tamaño de texto medio?

La razón por la que estoy preguntando es porque tengo algunos campos de tamaño de texto largo y recientemente me di cuenta de que son demasiado grandes, pero luego tuve problemas para motivarme a hacer el cambio minuto porque "¿cuál es el daño?" de ahí la pregunta.

Respuesta

29

La única diferencia de tamaño de almacenamiento es el número de bytes asignados para el "cuántos bytes es este campo" número. Desde el fine manual:

TINYTEXT L + 1 bytes, where L < 2^8 
TEXT  L + 2 bytes, where L < 2^16 
MEDIUMTEXT L + 3 bytes, where L < 2^24 
LONGTEXT L + 4 bytes, where L < 2^32 

Así que un longtext utilizará una más bytes que mediumtext para almacenar el mismo texto. Hay un poco más de información en la sección Data Type Storage Requirements del manual y algo más en la sección The BLOB and TEXT Types.

No hay diferencia práctica entre los cuatro tipos de TEXTO.

+3

Esto es lo que había asumido. La única diferencia real sería el uso de 1 byte extra de espacio por fila. ¿Es eso correcto? Si es así, no puedo imaginar por qué hay otras opciones de campo además del texto largo? – darkAsPitch

+2

@darkAsPitch: AFAIK el byte extra es la única diferencia. Probablemente haya cuatro tipos por razones históricas. –

2

Mysql usa tablas temporales muchas veces para ejecutar consultas. Así que la desventaja de tener un campo de gran tamaño es que MySql reservará tanto espacio para la columna.

Tendrá lenta ejecución con los mismos datos si tiene esa columna marcada en longtext comparar a MEDIUMTEXT

+1

Pero los tipos de columna de texto medio y largo de MySQL son de longitud variable, la única diferencia entre ellos es la cantidad de bytes asignados para el tamaño de columna. –

+0

Si una tabla temporal interna se crea inicialmente como una tabla en memoria pero se vuelve demasiado grande, MySQL la convierte automáticamente en una tabla en disco. http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html – Jerem

+3

LONGTEXT tiene 4 GB. ¿Mysql reserva 4 GB de espacio (por fila) en tablas temporales cuando una columna LONGTEXT está involucrada en la consulta? Eso parece impracticable cuando hay más de unas cuantas filas involucradas. – sandinmyjoints

Cuestiones relacionadas