EXPLAIN arată planul ales de optimizator — cum va accesa fiecare tabel — fără a rula interogarea. Îl citești pentru a confirma că indecșii sunt folosiți și că puține rânduri sunt examinate.
EXPLAIN arată planul ales de optimizator — cum va accesa fiecare tabel — fără a rula interogarea. Îl citești pentru a confirma că indecșii sunt folosiți și că puține rânduri sunt examinate.
const / eq_ref / ref (căutări de index, bine) → range → index (scanare completă de index) → ALL (full table scan, semnalul de alarmă).NULL = niciunul).Using index (covering, excelent), Using filesort / Using temporary (sortare/grupare în memorie sau pe disc — adesea optimizabilă).EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- +------+------+------+---------+--------+----------------+
-- | type | key | rows | Extra |
-- | ALL | NULL | 900k | Using where; Using filesort | <- scanează tot, sortează
-- +------+------+------+---------+--------+----------------+
-- Adaugă un index care acoperă filtrul ȘI ordinea de sortare:
CREATE INDEX idx_cust_created ON orders (customer_id, created_at);
EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- | type | key | rows | Extra |
-- | ref | idx_cust_created | 30 | Using where | <- caută 30 rânduri, fără filesort
Indexul a transformat o scanare ALL a 900k rânduri într-o căutare ref de 30, iar pentru că created_at este a doua coloană, rândurile ies deja sortate — filesort-ul dispare.
Folosește EXPLAIN ANALYZE (MySQL 8) ca să vezi și timpii și numărul de rânduri reale, prinzând cazurile în care estimarea este greșită.
EXPLAIN este modul în care înlocuiești ghicitul cu dovezi. Detectarea lui type: ALL, a unui rows uriaș sau a lui Using filesort îți spune exact unde lipsește un index — cea mai rapidă cale de la "pagina e lentă" la o remediere țintită.
O bibliotecă de întrebări de interviu IT cu răspunsuri detaliate — de la Junior la Senior.
Donează