A la hora de realizar una buena optimización de las consultas de MySQL habrá que prestar mucha atención a lo que dice la cláusula EXPLAIN. Su sintaxis es muy sencilla, basta anteponerlo a la consulta que queremos realizar para obtener toda la información.
EXPLAIN SELECT columna1, columna2 FROM tabla1 WHERE columna3 = ‘2’\G
El resultado que obtendremos será el plan de ejecución de la consulta a la base de datos. Una explicación de como accederá MySQL a las diferentes columnas involucradas en la consulta. EXPLAIN devolverá:
- id: Es el identificador que EXPLAIN asignará a la consulta.
- select_type: Tipo de consulta a analizar. Por ejemplo, si se trata de una consulta sencilla su valor será SIMPLE.
- table: Nombre de la tabla a la que hacen referencia el resto de datos en la fila. Hay que tener en cuenta que el orden de las filas será el que utilizará MySQL para acceder a los datos.
- type: Indica como MySQL combinará los datos de esa tabla.
- possible_keys: Lista de los indices que se podrían utilizar, aunque podría no usarse ninguno.
- key: Índice que finalmente se usará, si no se usa ninguno el valor del campo será NULL.
- key_len: Tamaño del indice utilizado, si no se usó ninguno contendrá NULL.
- ref: Muestra con que campo está relacionado el índice seleccionado.
- rows: Número de registros que se tendrán que recuperar para ejecutar la consulta.
- extra: Información adicional sobre la forma en que se obtendrán los datos.
Con esta información es posible encontrar donde se producen los cuellos de botella en las consultas que realizamos a la base de datos, y nos permitirá optimizarlas para evitar que una consulta lenta provoque un retraso injustificado en la devolución de resultados a los usuarios. En el manual de MySQL puedes encontrar más información.