EXPLAIN zeigt den Plan, den der Optimizer gewählt hat — wie er auf jede Tabelle zugreift — ohne die Abfrage auszuführen. Du liest ihn, um zu bestätigen, dass Indizes genutzt werden und wenige Zeilen untersucht werden.
EXPLAIN zeigt den Plan, den der Optimizer gewählt hat — wie er auf jede Tabelle zugreift — ohne die Abfrage auszuführen. Du liest ihn, um zu bestätigen, dass Indizes genutzt werden und wenige Zeilen untersucht werden.
const / eq_ref / ref (Index-Lookups, gut) → range → index (voller Index-Scan) → ALL (Full Table Scan, das Warnsignal).NULL = keiner).Using index (covering, prima), Using filesort / Using temporary (Sortieren/Gruppieren im Speicher oder auf der Platte — oft optimierbar).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
Der Index verwandelte einen ALL-Scan über 900k Zeilen in einen ref-Seek über 30, und weil created_at die zweite Spalte ist, kommen die Zeilen vorsortiert heraus — das filesort verschwindet.
Verwende EXPLAIN ANALYZE (MySQL 8), um zusätzlich die tatsächlichen Zeiten und Zeilenzahlen zu sehen und Fälle zu erkennen, in denen die Schätzung falsch ist.
EXPLAIN ist der Weg, Raten durch Belege zu ersetzen. type: ALL, ein riesiges rows oder Using filesort zu erkennen, sagt dir genau, wo ein Index fehlt — der schnellste Weg von "die Seite ist langsam" zu einer gezielten Korrektur.
Eine Sammlung von IT-Interviewfragen mit ausführlichen Antworten — vom Junior bis zum Senior.
Spenden