Blog de Gonzalo

EXPLAIN

En mysql hay una sentencia que permite optimizar las queries usadas para obtener datos de la base de datos. Dicha sentencia es explain que se usan poniendo dicha sentencia justo antes de la sentencia de consulta (select). Con explain se obtiene la manera en que se ejecutaría la consulta en la base de datos siento extremadamente útil para conocer la configuración de índices en las tablas, los índices que podrían ser configurados para mejorar su rendimiento, el número de filas que se revisan, el tipo de query, etc...
En el resultado de explain de mysql se mostrará una tabla con 10 columnas de información para cada tabla implicada:
TYPE
-type: Esta columna indica el tipo de unión que se está usando (de más a menos óptimo).
-const: Es la más óptima y se dá cuando la tabla tiene como máximo una fila que coincide. Como solo hay una fila coincidente, MySQL la considerará como constante por el optimizador.
-eq_ref: Una fila será leída de la tabla A por cada combinación de fila de la tabla B. Este tipo es usada cuando todas las partes de un índice son usados para la consulta y el índice es UNIQUE o PRIMARY.
-ref: Todas las filas con valores en el índice que coincidan serán leídos desde esta tabla por cada combinación de filas de las tablas previas. Si la clave que es usada coincide sólo con pocas filas, esta unión es buena.
-range: Sólo serán recuperadas las filas que estén en un rango dado, usando un índice para seleccionar las filas. La columna key indica que índice se usará, y el valor key_len contiene la parte más grande de la clave que fue usada. La columna ref será NULL para este tipo.
-index: Este es el mismo que ALL, excepto que sólo el índice es escaneado. Este es usualmente más rápido que ALL, ya que el índice es usualmente de menor tamaño que la tabla completa.
-ALL: Realiza un escaneo completo de tabla por cada combinación de filas de las tablas previas. Este caso es el peor de todos.
POSSIBLE_KEYS
-possible_keys: Esta columna indica los posibles índices a utilizar en la consulta.
KEY
-key: Esta columna indica el indice que mysql está usando. Esta columna es NULL si no se ha elegido ninguno. Se puede forzar a mysql.
KEY_LEN
-key_len: El tamaño del índice usado. Cuanto menor sea el valor mucho mejor para la consulta.
REF
-ref:
La columna ref muestra que columna o constante es usada junto a la key para seleccionar las columnas de la tabla.
ROWS
-rows: Indica el número de columnas que sql cree necesario examinar para ejecutar el sql.
EXTRA
-extra: Indica información adicional de como mysql ha resuelto el sql y hay que prestar atención si aparece USING FILESORT o USING TEMPORARY. En el primer caso, indica que mysql debe hacer un paso extra para recuperar la información. En el segundo, mysql necesita generar una tabla extra para mantener la información y después mostrarla y es típico al usar GROUP BY u ORDER BY.

Compartir en twitter