Το EXPLAIN δείχνει το plan που επέλεξε ο optimizer — πώς θα προσπελάσει κάθε πίνακα — χωρίς να εκτελέσει το query. Το διαβάζεις για να επιβεβαιώσεις ότι χρησιμοποιούνται indexes και ότι εξετάζονται λίγες γραμμές.
Το EXPLAIN δείχνει το plan που επέλεξε ο optimizer — πώς θα προσπελάσει κάθε πίνακα — χωρίς να εκτελέσει το query. Το διαβάζεις για να επιβεβαιώσεις ότι χρησιμοποιούνται indexes και ότι εξετάζονται λίγες γραμμές.
const / eq_ref / ref (index lookups, καλό) → range → index (full index scan) → ALL (full table scan, το κόκκινο σημάδι).NULL = κανένα).Using index (covering, τέλειο), Using filesort / Using temporary (sorting/grouping στη μνήμη ή στο disk — συχνά βελτιστοποιήσιμο).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
Το index μετέτρεψε ένα ALL scan 900k γραμμών σε ένα ref seek 30 γραμμών, και επειδή το created_at είναι η δεύτερη στήλη, οι γραμμές βγαίνουν ήδη ταξινομημένες — το filesort εξαφανίζεται.
Χρησιμοποίησε EXPLAIN ANALYZE (MySQL 8) για να δεις επίσης τους πραγματικούς χρόνους και αριθμούς γραμμών, εντοπίζοντας περιπτώσεις όπου η εκτίμηση είναι λάθος.
Το EXPLAIN είναι ο τρόπος με τον οποίο αντικαθιστάς την εικασία με στοιχεία. Το να εντοπίσεις type: ALL, ένα τεράστιο rows ή Using filesort σου λέει ακριβώς πού λείπει ένα index — ο γρηγορότερος δρόμος από το "η σελίδα είναι αργή" σε μια στοχευμένη διόρθωση.
Μια βιβλιοθήκη ερωτήσεων συνέντευξης IT με αναλυτικές απαντήσεις — από Junior έως Senior.
Δωρεά