miércoles, 7 de septiembre de 2022

Revisar planes de ejecución en MySql

La sentencia EXPLAIN se usa en Mysql para proporciona información sobre cómo su base de datos ejecuta una consulta. En MySQL, EXPLAINse puede usar delante de una consulta que comienza con SELECTINSERTDELETEREPLACEUPDATE

En lugar de la salida de resultados habitual, MySQL mostraría su plan de ejecución explicando qué procesos tienen lugar y en qué orden se ejecutan las sentencias.

La información más importante de la salida del Explain es una columna TYPE que explica el tipo de recorrido que realiza para obtener los datos, si esta consultando indices o montones de datos.

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. 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.

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).

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.

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. 

No hay comentarios:

Publicar un comentario