EXPLAIN menampilkan plan yang dipilih optimizer — bagaimana ia akan mengakses setiap tabel — tanpa menjalankan query. Anda membacanya untuk memastikan index digunakan dan sedikit baris yang diperiksa.
EXPLAIN menampilkan plan yang dipilih optimizer — bagaimana ia akan mengakses setiap tabel — tanpa menjalankan query. Anda membacanya untuk memastikan index digunakan dan sedikit baris yang diperiksa.
const / eq_ref / ref (index lookup, bagus) → range → index (full index scan) → ALL (full table scan, tanda bahaya).NULL = tidak ada).Using index (covering, hebat), Using filesort / Using temporary (sorting/grouping di memory atau disk — sering dapat dioptimalkan).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 tersebut mengubah scan ALL atas 900 ribu baris menjadi seek ref atas 30, dan karena created_at adalah kolom kedua, baris keluar dalam keadaan sudah terurut — filesort menghilang.
Gunakan EXPLAIN ANALYZE (MySQL 8) untuk juga melihat timing dan jumlah baris aktual, menangkap kasus di mana perkiraan salah.
EXPLAIN adalah cara Anda mengganti tebakan dengan bukti. Melihat type: ALL, rows yang besar, atau Using filesort memberi tahu Anda persis di mana sebuah index hilang — jalur tercepat dari "halaman ini lambat" ke perbaikan yang tepat sasaran.
Perpustakaan pertanyaan wawancara IT dengan jawaban mendetail — dari Junior hingga Senior.
Donasi