MySQL EXPLAIN en Consultas de Eloquent

Spread the love

Tarde o temprano tenemos que buscar la forma de optimizar nuestras consultas y para eso tenemos el comando EXPLAIN de MYSQL.

La sentencia EXLAIN de MySQL es una herramienta que se utiliza para obtener un plan de ejecución de las sentencias SQL (es decir, una explicación de cómo MySQL ejecutaría una consulta).

Con la ayuda de EXPLAIN, puedes ver dónde debes añadir índices a las tablas para que la sentencia se ejecute más rápido. También puedes usar EXPLAIN para comprobar si el optimizador une las tablas en un orden óptimo.

Para usar EXPAIN tienes que ejecutar las consultas en el gestor de base de datos:

mysql> EXPLAIN SELECT * FROM users WHERE email = 'mhoeger@example.com';

Y esto es muy molesto cuando estas usando Eloquent ya que primero tienes que saber como fue que armo la consulta y luego probarla en consola.

La buena noticia es que a partir de Laravel 8 ya es posible usar este comando con el QueryBuilder, de esta forma es posible usar el comando EXPLAIN con el facade DB o Eloquent.

La forma de usarlo es solo de llamar al método explain().

User::whereEmail('mhoeger@example.com')->explain();

Cuando se ejecute a consulta obtendremos algo como lo siguiente:

 Illuminate\Support\Collection {#4447
     all: [
       {#4433
         +"id": 1,
         +"select_type": "SIMPLE",
         +"table": "users",
         +"partitions": null,
         +"type": "const",
         +"possible_keys": "users_email_unique",
         +"key": "users_email_unique",
         +"key_len": "1022",
         +"ref": "const",
         +"rows": 1,
         +"filtered": 100.0,
         +"Extra": null,
       },
     ],
   }