EXPLAIN viser den plan, optimizeren valgte — hvordan den vil tilgå hver tabel — uden at køre query'en. Du læser den for at bekræfte, at indekser bruges, og at få rækker undersøges.
EXPLAIN viser den plan, optimizeren valgte — hvordan den vil tilgå hver tabel — uden at køre query'en. Du læser den for at bekræfte, at indekser bruges, og at få rækker undersøges.
const / eq_ref / ref (index-opslag, godt) → range → index (full index scan) → ALL (full table scan, det røde flag).NULL = ingen).Using index (covering, fremragende), Using filesort / Using temporary (sortering/gruppering i hukommelsen eller på disk — ofte optimerbart).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
Indekset forvandlede en ALL-scan af 900k rækker til et ref-seek på 30, og fordi created_at er den anden kolonne, kommer rækkerne ud færdigsorterede — filesort forsvinder.
Brug EXPLAIN ANALYZE (MySQL 8) for også at se faktisk timing og rækkeantal, hvilket fanger tilfælde, hvor estimatet er forkert.
EXPLAIN er, hvordan du erstatter gætteri med beviser. At spotte type: ALL, et enormt rows eller Using filesort fortæller dig præcis, hvor et indeks mangler — den hurtigste vej fra "siden er langsom" til en målrettet rettelse.
Et bibliotek af IT-interviewspørgsmål med detaljerede svar — fra Junior til Senior.
Donér