Revisar la referencia de MySQL: http://dev.mysql.com/doc/refman/8.0/en/explain-output.html
Acceso a la tabla y el índice
El plan de ejecución de MySQL tiende a dar una falsa sensación de seguridad porque explica mucho cómo se usan los índices. Aunque es técnicamente correcto, no significa que los índices se utilicen de manera eficiente. La información más importante es una columna TYPE
de la salida del explain
de MySQL, pero incluso ahí la palabra INDEX
no indica el uso correcto de la indexación.
- eq_ref, const
Realiza un recorrido de un B-tree para encontrar una fila (como
INDEX UNIQUE SCAN
) y trae las columnas adicionales desde la tabla si se necesitan (TABLE ACCESS BY INDEX ROWID
). La base de datos emplea esta operación si una clave primaria o una restricción de unicidad aseguran que el criterio de búsqueda coincide sólo con una entrada. Ver “Usar Índice" para comprobarlo, sin importar si el acceso a la tabla ocurre o no.- ref, range
Realiza un recorrido del B-tree, lee los nodos hoja para encontrar todas las entradas del índice. (similar a
INDEX RANGE SCAN
) y obtiene las columnas adicionales desde la primera tabla almacenada si es necesario (TABLE ACCESS BY INDEX ROWID
). Ver “Usar índice para comprobarlo, sin importar si el acceso a la tabla tiene o no lugar.- index
Lee el índice entero (todos las filas) en el orden del mismo (similar a
INDEX FULL SCAN
).- ALL
Lee la tabla entera (todas las filas y las columnas) tal y como se almacena en disco. Además de la tasa alta de I/O, un escaneo de tabla debe leer todas las filas desde la tabla así que también puede agregar una carga considerable para la CPU. Ver también “FULL TABLE SCAN”.
- Usando índice (en la columna “Extra”)
Cuando la columna “Extra” muestra “Using Index” (Usando un índice), significa que no se produce acceso a la tabla porque el índice tiene todos los datos requeridos. En este caso se puede pensar en utilizar solamente el índice. Sin embargo, si se usa una agrupación de índice (por ejemplo, el índice
PRIMARY
cuando se utiliza InnoDB), “Using Index” no aparece en la columna “Extra” aunque técnicamente se trata sólo de un escaneo del índice. Ver también “Agrupación de datos: El segundo poder de la indexación”.- PRIMARY (en la columna “key” o “possible_keys”)
PRIMARY
es el nombre del índice creado automáticamente por la clave primaria.
Ordenar y agrupar
- Usa filesort (en la columna “Extra”)
“Using filesort” en la columna Extra indica una operación de ordenamiento explícita sin importar dónde esté el ordenamiento (en la memoria principal o en el disco). El empleo de “filesort” requiere una gran cantidad de memoria para materializar el resultado intermedio (sin pipeline). Ver también “Indexar Order By”.
Sentencias Top-N
- Implícito: sin “using filesort” en la columna “Extra”
Un plan de ejecución de MySQL no muestra una sentencia Top-N explícita. Si se usa la sintaxis
limit
y no se ve “using filesort” en la columna Extra, se ejecuta de forma pipeline. Ver también “Seleccionar registros Top-N”.