Az EXPLAIN megmutatja a tervet, amelyet az optimizer választott — hogyan fér hozzá az egyes táblákhoz — anélkül, hogy lefuttatná a lekérdezést. Azért olvasod, hogy megerősítsd: az indexek használatban vannak és kevés sor kerül átvizsgálásra.
Az EXPLAIN megmutatja a tervet, amelyet az optimizer választott — hogyan fér hozzá az egyes táblákhoz — anélkül, hogy lefuttatná a lekérdezést. Azért olvasod, hogy megerősítsd: az indexek használatban vannak és kevés sor kerül átvizsgálásra.
const / eq_ref / ref (index-keresések, jó) → range → index (teljes index scan) → ALL (full table scan, a vészjelzés).NULL = egyiket sem).Using index (covering, remek), Using filesort / Using temporary (rendezés/csoportosítás memóriában vagy lemezen — gyakran optimalizálható).EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- +------+------+------+---------+--------+----------------+
-- | type | key | rows | Extra |
-- | ALL | NULL | 900k | Using where; Using filesort | <- mindent scannel, rendez
-- +------+------+------+---------+--------+----------------+
-- Adj hozzá egy indexet, amely lefedi a szűrőt ÉS a rendezési sorrendet:
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 | <- 30 sort keres, nincs filesort
Az index egy 900 ezer soros ALL scant egy 30 soros ref seekké alakított, és mivel a created_at a második oszlop, a sorok előre rendezve jönnek ki — a filesort eltűnik.
Használd az EXPLAIN ANALYZE-t (MySQL 8), hogy a tényleges időzítést és sorszámokat is lásd, kiszűrve azokat az eseteket, ahol a becslés téves.
Az EXPLAIN az, amivel a találgatást bizonyítékra cseréled. A type: ALL, egy hatalmas rows vagy a Using filesort észlelése pontosan megmondja, hol hiányzik egy index — a leggyorsabb út "az oldal lassú"-tól egy célzott javításig.
IT interjúkérdések gyűjteménye részletes válaszokkal — Juniortól Seniorig.
Adományozás