¿Necesito reindexar la tabla mysql después de la eliminación masiva?


10

Tengo una tabla en MySQL con mucho INSERT y SELECT a cada segundo. Y hay una eliminación masiva de algunos datos antiguos una vez al día. ¿Necesito reindexar la tabla después de eliminar? Quiero aumentar el rendimiento. ¿Alguien puede sugerir algunos consejos? Usando 'innodb' como motor de almacenamiento. ¿Necesito cambiarlo? Creo que es mejor para insertar y seleccionar simultáneamente. Por favor da tus sugerencias. ¿Necesito reindexar?

Gracias por adelantado..

Respuestas:


10

¿Necesita optimizar las tablas cuando usa InnoDB? Sí y no, dependiendo de su carga de trabajo y si tiene problemas de rendimiento o no.

Un descarado copiar y pegar de la documentación de MySQL :

Para las tablas InnoDB, OPTIMIZE TABLE se asigna a ALTER TABLE, que reconstruye la tabla para actualizar las estadísticas del índice y liberar espacio no utilizado en el índice agrupado. Esto se muestra en la salida de OPTIMIZE TABLE cuando lo ejecuta en una tabla InnoDB, como se muestra aquí:

mysql> OPTIMIZE TABLE foo;
+----------+----------+----------+-------------------------------------------------------------------+
| Table    | Op       | Msg_type | Msg_text                                                          |
+----------+----------+----------+-------------------------------------------------------------------+
| test.foo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.foo | optimize | status   | OK                                                                |
+----------+----------+----------+-------------------------------------------------------------------+

Esta operación no utiliza la creación rápida de índices. Los índices secundarios no se crean de manera tan eficiente porque las claves se insertan en el orden en que aparecieron en la clave primaria. Consulte la Sección 14.14.6, “Limitaciones de la creación rápida de índices”.

InnoDB almacena datos utilizando un método de asignación de páginas y no sufre fragmentación de la misma manera que los motores de almacenamiento heredados (como MyISAM). Al considerar si ejecutar o no optimizar, considere la carga de trabajo de las transacciones que procesará su servidor:

  • Se espera cierto nivel de fragmentación. InnoDB solo llena las páginas al 93%, para dejar espacio para las actualizaciones sin tener que dividir las páginas.

  • Las operaciones de eliminación pueden dejar espacios que dejan las páginas menos llenas de lo deseado, lo que puede hacer que valga la pena optimizar la tabla.

  • Las actualizaciones de filas suelen reescribir los datos dentro de la misma página, según el tipo de datos y el formato de fila, cuando hay suficiente espacio disponible. Consulte la Sección 14.10.5, “Cómo funciona la compresión para las tablas de InnoDB” y la Sección 14.12.1, “Descripción general del almacenamiento de filas de InnoDB”.

  • Las cargas de trabajo de alta concurrencia pueden dejar huecos en los índices a lo largo del tiempo, ya que InnoDB retiene múltiples versiones de los mismos datos debido a través de su mecanismo MVCC. Consulte la Sección 14.5.12, "InnoDB Multi-Versioning".


5

Podrías reindexar la mesa e incluso reducirla. Sin embargo, si desea retrasar dicho mantenimiento basado en disco, debe, como mínimo, volver a calcular las estadísticas de índice.

Sin volver a calcular las estadísticas del índice, el Optimizador de consultas MySQL puede tomar malas decisiones para los planes EXPLAIN de consultas. Esto podría afectar negativamente a los SELECT si las estadísticas de los datos no existentes todavía están presentes. Esto es cierto tanto para MyISAM como para InnoDB.

No tiene que reducir la tabla para calcular las estadísticas del índice, aunque será mejor para el rendimiento general.

Para calcular estadísticas para todos los índices en una tabla, debería ejecutar

ANALYZE TABLE tablename;

Podrías hacer esto todas las noches. No intentará desfragmentar o reducir los datos. Probablemente podrías hacer eso una vez a la semana corriendo OPTIMIZE TABLE tablename;. Esto también lo hará ANALYZE TABLE tablename;por usted después de la reducción del archivo físico de la tabla ( .ibdpara InnoDB o .MYIMyISAM) o.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.