EXPLAIN يُظهر الخطة التي اختارها المُحسِّن (optimizer) — كيف سيصل إلى كل جدول — دون تشغيل الاستعلام. تقرؤها للتأكد من استخدام الفهارس ومن فحص عدد قليل من الصفوف.
EXPLAIN يُظهر الخطة التي اختارها المُحسِّن (optimizer) — كيف سيصل إلى كل جدول — دون تشغيل الاستعلام. تقرؤها للتأكد من استخدام الفهارس ومن فحص عدد قليل من الصفوف.
const / eq_ref / ref (عمليات بحث بالفهرس، جيدة) → range → index (مسح كامل للفهرس) → ALL (مسح كامل للجدول، العلامة الحمراء).NULL = لا شيء).Using index (تغطية، ممتاز)، وUsing filesort / Using temporary (فرز/تجميع في الذاكرة أو على القرص — قابل للتحسين غالبًا).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
حوّل الفهرس مسح ALL لـ 900 ألف صف إلى بحث ref بـ 30 صفًا، ولأن created_at هو العمود الثاني، تخرج الصفوف مفروزة مسبقًا — ويختفي الـ filesort.
استخدم EXPLAIN ANALYZE (في MySQL 8) لترى أيضًا التوقيت وأعداد الصفوف الفعلية، ملتقطًا الحالات التي يكون فيها التقدير خاطئًا.
EXPLAIN هو كيف تستبدل الأدلة بالتخمين. ورصد type: ALL أو rows ضخم أو Using filesort يخبرك بالضبط أين يغيب فهرس — أسرع طريق من "الصفحة بطيئة" إلى إصلاح مُوجَّه.
مكتبة من أسئلة مقابلات تقنية المعلومات مع إجابات مفصّلة — من المبتدئ إلى المتقدم.
تبرع