EXPLAIN viser planen optimalisatoren valgte — hvordan den vil aksessere hver tabell — uten å kjøre spørringen. Du leser den for å bekrefte at indekser brukes og at få rader undersøkes.
EXPLAIN viser planen optimalisatoren valgte — hvordan den vil aksessere hver tabell — uten å kjøre spørringen. Du leser den for å bekrefte at indekser brukes og at få rader undersøkes.
const / eq_ref / ref (index-oppslag, bra) → range → index (full index scan) → ALL (full table scan, faresignalet).NULL = ingen).Using index (covering, flott), Using filesort / Using temporary (sortering/gruppering i minne eller på disk — ofte mulig å optimalisere).EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- +------+------+------+---------+--------+----------------+
-- | type | key | rows | Extra |
-- | ALL | NULL | 900k | Using where; Using filesort | <- scans everything, sorts
-- +------+------+------+---------+--------+----------------+
-- Add an index that covers the filter AND the sort order:
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 | <- seeks 30 rows, no filesort
Indeksen gjorde en ALL-skanning av 900k rader om til et ref-seek på 30, og fordi created_at er den andre kolonnen, kommer radene ut ferdigsortert — filesort forsvinner.
Bruk EXPLAIN ANALYZE (MySQL 8) for å også se faktisk tidsbruk og radantall, slik at du fanger tilfeller der estimatet er feil.
EXPLAIN er måten du erstatter gjetting med bevis. Å oppdage type: ALL, et enormt rows eller Using filesort forteller deg nøyaktig hvor en indeks mangler — den raskeste veien fra "siden er treg" til en målrettet løsning.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner