Tipos de join e información extra en EXPLAIN de Mysql

Cuando analizamos consultas a la base de datos con EXPLAIN, ciertas columnas que nos devuelve proveen mucha información, pero hay que saber leerlas. En este caso voy a hablar de los tipos de join entre las tablas y algunos de los extras.

Tipos de Join

Se muestran en la columna “Type”. El orden en que se detallan corresponde a la preferencia relativa entre los tipos de join, de mejor (system) a peor (ALL). Ej: es preferible que el tipo de join sea eq_ref en lugar de ref_or_null, que a su vez es mejor que range, el cual se prefiere antes que ALL.

  1. system: la tabla posee una sola fila
  2. const: la tabla matchea a lo sumo con 1 fila
  3. eq_ref: una fila se lee de esta tabla por cada combinación de filas de las tablas previas
  4. ref: toda las filas que matchean un valor del índice de esta tabla se leen de esta tabla por cada combinación de filas de las tablas previas
  5. fulltext: se usa un índice fulltext
  6. ref_or_null: similar a ref pero se buscan valores NULL también
  7. index_merge: es una optimización que utiliza varios índices y luego une los resultados
  8. unique_subquery: similar a ref en subqueries dentro de un IN cuando tiene índices unique
  9. index_subquery: similar a unique_subquery cuando tiene índices NO unique
  10. range: se obtienen las filas en un rango, usando un índice
  11. index: similar a ALL pero escanea el índice (puede estar con el Extra “using index”)
  12. ALL: consulta todos los registros de la tabla (full table scan) por cada combinación de filas de las tablas previas

Extras

Se muestran en la columna “Extra”. Pueden aparecer solos o combinados entre sí o con otros extras.

  • Using filesort: se hace una pasada adicional para determinar como obtener las filas ordenadas
    • es común cuando se utiliza un GROUP BY u ORDER BY, y no se puede ordenar con el índice
  • Using where: se usa el WHERE para restringir las filas que matchean contra la siguiente tabla
    • se podría decir que es casi necesario que aparezca para tipos de join: ALL e index
  • Using index: la información es obtenida solamente consultando el índice
    • con Using where: el índice se usa además para buscar valores de los campos en el índice
    • sin Using where: el índice se usa solo para evitar leer filas de la tabla
  • Using temporary: se crea una tabla temporal para generar el resultado
    • es común cuando se utiliza un GROUP BY

Basado en:

http://dev.mysql.com/doc/refman/5.7/en/explain-output.html

Tagged with: ,
Publicado en Aplicaciones