21 de febrero de 2016

:: Sentencia Explain en MySQL

La sentencia EXPLAIN de MySQL, quizás poco conocida y utilizada puede servirnos para optimizar las consultas sobre nuestra base de datos.
Esta sentencia devuelve una relación de registros  con información sobre cada una de las tablas empleadas en la consulta a la que acompaña.

El formato de la misma es la siguiente:
EXPLAIN SELECT * FROM tabla1, tabla2; 

Los registros devueltos como resultado de la consulta anterior  muestran la lista las tablas en el orden en el que MySQL las leería al procesar la consulta, es decir, el primer registro (fila) devuelto sería la primera tabla que se lee, y último registro sería la última tabla que sería leída.
Este orden es importante ya que nos indicará el plan de ejecución de la consulta y, por tanto, será información relevante para llevar a cabo las posibles optimizaciones.

Adicionalmente puede utilizarse la sentencia EXTENDED para obtener información más detallada del plan de ejecución. En este caso, nos devolverá una columna adicional denominada “filtered”, que nos indicará el porcentaje aproximado de filas filtradas por la condición empleada en la tabla.

El formato es el siguiente:
EXPLAIN EXTENDED SELECT * FROM tabla1, tabla2; 
Utilizada esta sentencia con SHOW WARNINGS nos mostrará la consulta reescrita tras la actuación del optimizador.
 EXPLAIN SELECT * FROM tabla1, tabla2 SHOW WARNINGS; 
Otro posible uso sería con PARTITIONS, para obtener información sobre las tablas particionadas de la consulta.
 EXPLAIN PARTITIONS SELECT * FROM tabla1, tabla2;
Tras la ejecución de la consulta con la sentencia EXPLAIN obtendremos una serie de filas con distintos campos, que pasaremos a describir a continuación:

  • id: identificador de cada una de las tablas procesadas en la consulta
  • select_type: indica el tipo de SELECT que se ha ejecutado. En función del tipo de SELECT nos permitirá identificar qué tipo de consulta se trata; Existen varios tipos: SIMPLE, PRIMARY, UNION, DERIVED…
  • table: nombre de la tabla a la que se refiere la información de la fila. También, puede ser alguno de los siguientes valores:
    • : tabla resultante de la unión de las tablas cuyos campos id son M y N
    • : tabla resultante de una tabla derivada (una subconsulta en la cláusula FROM)cuyo id es N
    • : tabla resultante de una subconsulta cuyo id es N
  • partitions: particiones cuyos registros coinciden con los de la consulta (cuando se utiliza EXPLAIN PARTITIONS)
  • type: tipo de unión utilizado
  • possible_keys: indices disponibles sobre la tabla. Si esta columna es NULL, indica que no hay índices que puedan ser utilizados para optimizar la consulta
  • key: índice utilizado por MySQL para ejecuar la consulta. Puede ocurrir que el nombre del índice no esté presente en la lista de possible_keys
  • key_len: tamaño del índice utilizado por MySQL para ejecutar la consulta.
  • ref: columnas o constantes comparadas con el índice especificado en la columna key
  • rows: número de filas aproximado que MySQL considera que deben ser examinadas para ejecutar la consulta
  • filtered: porcentaje estimado de filas que serán filtradas por la condición de la consulta (cuando se utiliza EXPLAIN EXTENDED)
  • Extra: información adicional sobre cómo MySQL ejecuta la consulta

 Más información sobre MySQL: http://dev.mysql.com/doc/refman/5.7/en/




No hay comentarios:

Publicar un comentario

Déjanos tu comentario

:: Cookies de nuestra página web. ¿Para qué sirve cada una?

A menudo una pregunta que nos hacen es qué cookies se están utilizando en mi página y para qué sirven. Para ver las cookies, podemos selecci...