EXPLAIN toont het plan dat de optimizer koos — hoe hij elke tabel zal benaderen — zonder de query uit te voeren. Je leest het om te bevestigen dat indexes worden gebruikt en dat er weinig rijen worden onderzocht.
EXPLAIN toont het plan dat de optimizer koos — hoe hij elke tabel zal benaderen — zonder de query uit te voeren. Je leest het om te bevestigen dat indexes worden gebruikt en dat er weinig rijen worden onderzocht.
const / eq_ref / ref (index lookups, goed) → range → index (volledige index scan) → ALL (full table scan, de rode vlag).NULL = geen).Using index (covering, geweldig), Using filesort / Using temporary (sorteren/groeperen in het geheugen of op schijf — vaak optimaliseerbaar).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
De index veranderde een ALL-scan van 900k rijen in een ref-seek van 30, en omdat created_at de tweede kolom is, komen de rijen al vooraf gesorteerd binnen — de filesort verdwijnt.
Gebruik EXPLAIN ANALYZE (MySQL 8) om ook de werkelijke timing en aantallen rijen te zien, waarmee je gevallen betrapt waar de schatting fout is.
EXPLAIN is hoe je gokken vervangt door bewijs. type: ALL, een enorme rows of Using filesort opmerken vertelt je precies waar een index ontbreekt — de snelste route van "de pagina is traag" naar een gerichte fix.
Een bibliotheek met IT-sollicitatievragen met gedetailleerde antwoorden — van Junior tot Senior.
Doneren