Comanda clasică EXPLAIN afișează doar estimările teoretice ale optimizatorului MySQL înainte de rulare. Începând cu MySQL 8.0.18, comanda EXPLAIN ANALYZE reprezintă cel mai avansat instrument de profilare a performanței: ea execută efectiv interogarea pe server, înregistrează timpul real în milisecunde petrecut în fiecare nod al planului și returnează un arbore vizual detaliat.
EXPLAIN ANALYZE
SELECT c.nume, COUNT(o.id) AS total_comenzi
FROM clienti c
JOIN comenzi o ON c.id = o.client_id
WHERE c.tara = 'RO'
GROUP BY c.id;
-- REZULTAT FORMAT ARBORE:
-- -> Table scan on <temporary table> (actual time=0.125..0.130 rows=50 loops=1)
-- -> Aggregate using temporary table (actual time=0.120..0.122 rows=50 loops=1)
-- -> Nested loop inner join (cost=45.20 rows=250) (actual time=0.045..0.095 rows=300 loops=1)
-- -> Index lookup on c using idx_tara (tara='RO') (cost=10.50 rows=50) (actual time=0.020..0.035 rows=50 loops=1)
-- -> Index lookup on o using idx_client_id (client_id=c.id) (cost=0.65 rows=5) (actual time=0.001..0.001 rows=6 loops=50)
Cum se citesc metricile din rezultat
cost=45.20— Costul estimat de optimizator (unitate arbitrară bazată pe operațiuni I/O și CPU).actual time=0.020..0.035— Primul număr este timpul în milisecunde până la returnarea primului rând; al doilea număr este timpul până la returnarea tuturor rândurilor din acel nod.rows=50— Numărul real de rânduri produse de acel pas.loops=50— De câte ori a fost executată acea operațiune (de exemplu, o căutare repetată în buclă pentru fiecare client).
Atenție: Spre deosebire de EXPLAIN simplu, EXPLAIN ANALYZE execută interogarea! Dacă o rulezi pe o instrucțiune DELETE sau UPDATE, modificările vor fi aplicate efectiv în baza de date (rulează întotdeauna într-o tranzacție cu ROLLBACK la final pentru siguranță).