de Martin LE TARNEC.

Operaciones


MySQL reference: http://dev.mysql.com/doc/refman/5.6/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 asegura que el criterio de búsqueda coincide solo con una entrada. Ver “Usar Índice" para validar, 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 recupera las columnas adicionales desde la primera tabla almacenada si es necesario (TABLE ACCESS BY INDEX ROWID). Ver “Usar índice para validar, 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 el 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 el CPU. Ver también el FULL TABLE SCAN.

Usando índice (en la columna “Extra”)

Cuando la columna “Extra” muestra “Using Index” (Usando un índice), eso significa que no se tiene 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 solo de un escaneo del índice. Ver también el Agrupación de datos.

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 el 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 el Seleccionar registros Top-N.

Acerca del autor

Foto de Markus Winand

Markus Winand enseña eficientemente SQL, en casa y online. Minimiza el tiempo de desarrollo utilizando moderno SQL y optimiza el tiempo de ejecución con indexación inteligente. Para ello también ha publicado el libro SQL Performance Explained.

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia