Pregunta

Estaba leyendo sobre la refactorización de una gran consulta SQL lenta sobre aquí , y la más alta actual la respuesta es de Mitch Wheat, que quiere asegurarse de que la consulta usa índices para las selecciones principales y menciona:

  

Lo primero que haría es verificar para asegurarme de que hay un trabajo de mantenimiento de índice activo que se ejecuta periódicamente. De lo contrario, reconstruya todos los índices existentes o, si no es posible, al menos actualice las estadísticas.

Solo soy un DBA aficionado, y he realizado algunos programas independientes que son básicamente clientes de escritorio Java y ocasionalmente un servidor MySQL. Cuando configuro el sistema, sé que para crear un índice en las columnas que serán consultadas, hay un ID de caso varchar y un CustName varchar.

Sin embargo, configuré este sistema hace meses y dejé al cliente operando, y creo que los índices deberían crecer a medida que se ingresan los datos y creo que todo sigue funcionando bien. Sin embargo, me preocupa que los índices se reconstruyan periódicamente, porque hoy he leído que debería haber un 'trabajo de mantenimiento activo'. El único trabajo de mantenimiento que configuré fue una copia de seguridad nocturna.

Quería preguntarle a la comunidad sobre el mantenimiento regular que podría requerir una base de datos. ¿Es necesario reconstruir índices? ¿Puedo confiar en el backend de MySQL para que continúe siempre y cuando nadie se meta con él y los datos permanezcan por debajo de unos pocos gigabytes?

¿Fue útil?

Solución

No hay necesidad de 'reconstruir' un índice. Siempre se mantienen actualizados. Tal vez se refería a la reconstrucción de la mesa. Dependiendo de sus patrones de uso y esquema, puede obtener páginas fragmentadas en InnoDB, y creo que también en MyISAM. Reconstruir la tabla puede mejorar el rendimiento al eliminar la fragmentación de sus datos en el disco. No uso las tablas MyISAM regularmente, pero creo que se recomienda ejecutar 'OPTIMIZE TABLE' con ciertos patrones de uso. Consulte los documentos de MySQL en OPTIMIZE TABLE para obtener una buena información tanto en MyISAM como en InnoDB.

No estoy tan familiarizado con las complejidades de MyISAM, pero con InnoDB es cierto que las estadísticas pueden quedar desactualizadas. La base de datos mantiene estadísticas estimadas sobre cómo se distribuyen sus datos para un índice dado, y es posible que estos se desactualicen, pero MySQL / InnoDB tiene alguna funcionalidad incorporada para tratar de mantener las estadísticas actualizadas. Por lo general, no tiene que preocuparse por eso.

Entonces, si está utilizando InnoDB, la respuesta es no, por lo general, no necesita hacer nada para mantener sus índices funcionando correctamente. No estoy tan seguro con MyISAM, creo que es más común tener que optimizar esas tablas regularmente.

Otros consejos

Por lo general, es una buena idea configurar un cronjob para optimizar los índices y buscar errores.

Consulte mysqlcheck . Un trabajo cron típico se parece a mysqlcheck -Aaos , que comprueba todas las tablas en todas las bases de datos en busca de errores, optimiza los índices y solo genera errores.

La respuesta a la que se vinculó acerca de "mantenimiento regular" estaba en el contexto específico de una tabla temporal que se trunca y se repobla regularmente. No necesita hacer esto en la gran mayoría de las instalaciones de bases de datos MySQL.

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