Pregunta

Con Myisam con columnas de longitud variable (Varchar, Blob) en la tabla realmente ralentizó consultas para encontrar consejos en la red para mover las columnas Varchar a una tabla separada.

¿Sigue siendo un problema con innodb? No me refiero a los casos en los que introducir muchas filas Varchar en la tabla causa la división de la página. Solo quiero decir, ¿debería considerar, por ejemplo, mover post_text (campo de blob único en la tabla) a otra tabla, hablando de rendimiento sobre innodb?

¿Fue útil?

Solución

Hasta donde yo sé, los blobs (y los textos) se almacenan en realidad fuera de la tabla, los varchars se almacenan en la tabla.

Los varchars son malos para el rendimiento de lectura porque cada registro puede ser de longitud variable y eso hace que sea más costoso encontrar campos en un registro. Los blobs son lentos porque el valor debe obtenerse por separado y muy probablemente requerirá otra lectura del disco o caché.

Que yo sepa, Innodb no hace nada diferente a este respecto, por lo que asumiría que las características de rendimiento se mantienen.

No creo que mover los valores de blob realmente ayude, aparte de reducir el tamaño general de la tabla, lo que tiene una influencia positiva en el rendimiento independientemente. Varchars son una historia diferente. Definitivamente te beneficiarás aquí. Si todas sus columnas son de longitud definida (y supongo que eso significa que tampoco puede usar blobs?) La búsqueda de campo será más rápida.

Si solo estás 'leyendo' los campos Varhcar y Blob, diría que vale la pena disparar. Pero si su consulta seleccionada debe comparar un valor de un Varchar o una blob, está bastante agrio.

Entonces, sí, definitivamente puede obtener un rendimiento aquí, pero asegúrese de probar que realmente está ganando rendimiento y que el aumento vale la valiente desnormalización agresiva.

PD.

Otra forma de 'optimizar' el rendimiento de la lectura de Varchar es simplemente reemplazarlos por campos de char (de longitud fija). Esto podría beneficiar el rendimiento de lectura, siempre que el aumento en el espacio en el disco sea aceptable.

Otros consejos

Datos innodb de manera completamente diferente a Myisam.

En Myisam, todos los índices, primarios o de otra manera, se almacenan en el archivo myi y contienen un puntero a los datos almacenados en el archivo myd. Las filas de longitud variable no deberían afectar directamente la velocidad de consulta directamente, pero el archivo MyD tiende a fragmentarse más con filas de longitud variable porque el orificio que se fue cuando elimina una fila no necesariamente se puede archivar con la fila que inserta a continuación. Si actualiza un valor de longitud variable para que sea más tiempo, es posible que tenga que moverlo a otro lugar, lo que significa que tenderá a quedarse fuera de servicio con respecto a los índices a lo largo del tiempo, haciendo que las consultas de rango sean más lentas. (Si lo está ejecutando en un disco giratorio donde los tiempos de búsqueda son importantes).

InnoDB almacena datos agrupados en páginas en un árbol B en la clave primaria. Mientras los datos se ajusten en una página, se almacena en la página, ya sea que esté utilizando un blob o varchar. Siempre que no intente insertar valores excesivamente largos de manera regular, no debería importar si sus filas son de longitud fija o de longitud variable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top