de Martin LE TARNEC.

Operaciones


Revisar la referencia de MySQL: 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 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.

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.

Acerca del autor

Foto de Markus Winand

Markus Winand enseña SQL eficiente, en casa y online. Mejora el tiempo de desarrollo utilizando SQL moderno y optimiza el tiempo de ejecución con indexación inteligente. Su libro Rendimiento SQL explicado se ha convertido en lectura obligada sobre el tema.

Adquiere tu libro en Amazon

Portada de “Rendimiento SQL explicado”: Ardilla corriendo en la hierba

La esencia del tuning de SQL en 200 páginas

Compra en Amazon
(solo en papel)

Libro y PDF también disponible en la tienda de Markus.

Contratar a Markus

La manera más rápida y fácil de beneficiarse de su extenso conocimiento y experiencia.
Aprende más »

“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