EXPLAIN parodo optimizatoriaus pasirinktą planą — kaip jis prieis prie kiekvienos lentelės — nevykdydamas užklausos. Jį skaitote, kad patvirtintumėte, jog indeksai naudojami ir tikrinama nedaug eilučių.
EXPLAIN parodo optimizatoriaus pasirinktą planą — kaip jis prieis prie kiekvienos lentelės — nevykdydamas užklausos. Jį skaitote, kad patvirtintumėte, jog indeksai naudojami ir tikrinama nedaug eilučių.
const / eq_ref / ref (indekso paieškos, gerai) → range → index (pilnas indekso skenavimas) → ALL (pilnas lentelės skenavimas, raudona vėliava).NULL = joks).Using index (dengiantis, puiku), Using filesort / Using temporary (rikiavimas/grupavimas atmintyje ar diske — dažnai optimizuojama).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
Indeksas pavertė 900 tūkst. eilučių ALL skenavimą į 30 eilučių ref paiešką, o kadangi created_at yra antras stulpelis, eilutės išeina iš anksto surikiuotos — filesort dingsta.
Naudokite EXPLAIN ANALYZE (MySQL 8), kad taip pat pamatytumėte faktinį laiką ir eilučių skaičius, pagaunant atvejus, kai įvertinimas klaidingas.
EXPLAIN yra būdas pakeisti spėliojimą įrodymais. Pastebėjus type: ALL, milžinišką rows ar Using filesort, tiksliai matote, kur trūksta indekso — greičiausias kelias nuo „puslapis lėtas“ iki tikslinio pataisymo.
IT pokalbių klausimų biblioteka su išsamiais atsakymais — nuo Junior iki Senior.
Paaukoti