Mysqlindexcheck: Chequea índices en MySQL

Hola, hoy vamos a hablar de una herramienta nativa de MySQL muy útil. Se trata de mysqlindexcheck, una aplicación integrada dentro de MySQL Utilities y que se encarga de analizar los índices de una instancia MySQL, de una base de datos, o una tabla según los parámetros que se le pasen.

¿Cómo funciona mysqlindexcheck?

Para poder usarlo hay que instalar previamente MySQL Utilities. Una vez instalado, podremos revisar los índices de nuestra base de datos o tabla. Para usarlo hay que seguir la siguiente sintaxis:

mysqlindexcheck --server=usuario:contraseña@servidor:puerto base_de_datos.tabla

Si omitimos la tabla, analizará los índices de la base de datos. En caso de omitir la base de datos también, analizará la instancia entera de MySQL. Veamos un ejemplo de la salida de este comando:

mysqlindexcheck

En este caso se trata de una foreign key que contiene un campo de la primary key. Al ser una foreign key posiblemente es necesario que esté creada por la lógica de la aplicación. Hay que analizar cada caso en detalle ya que podríamos tener problemas en nuestra aplicación.

Un caso en el que sí es recomendable eliminar un índice sería por ejemplo si tuviera un índice único la tabla que incluyera un campo de la primary key. Una de las restricciones de la primary key es que sea un valor único por lo que ese índice no haría falta y podría provocar deadlocks.

¿Cómo afectan los índices duplicados?

Es importante saber qué impacto tiene el caso anterior en la aplicación. Los índices como norma general, suelen ser efectivos en tablas en los que hay muchas más lecturas que escrituras. Al acotar los resultados, estos son menores. De esta forma la ejecución de la consulta es menor. Por contra, penaliza en las escrituras, ya que cuando se realiza una nueva inserción o actualización de un registro, actualiza la tabla y todos los índices. Aparte de actualizarlos bloquea los índices de los campos afectados por lo que si tenemos dos índices para el mismo campo, como por ejemplo un índice único que incluya la primary key, se bloquearían entre sí.

Por lo tanto, los índices son recomendables en caso de muchas lecturas a costa de penalizar escrituras. Hay que tener cuidado de no crear índices duplicados para evitar bloqueos, para lo que nos ayudará mysqlindexcheck. Sin olvidar que debemos fijarnos también en  los índices sin uso. Para esto MySQL Workbench nos será de gran utilidad, ya que en las versiones de MySQL 5.6 o superior, nos recoge entre otros datos los índices sin uso o las queries con errores.

Os dejamos un link de un  artículo donde podéis ver como instalar MySQL Workbench en Centos 7 esquivando el bug que se produce en su instalación en Centos y Red Hat 7.

Esperamos que esta entrada haya sido de vuestro interés

Equipo base de datos