تخيل أنك تبحث عن اسم في كتاب بلا فهرس: ستقلّب كل الصفحات. هذا بالضبط ما تفعله MySQL حين لا تجد فهرساً يناسب استعلامك، وتسمى هذه العملية فحصاً كاملاً للجدول.
ما هو الفهرس؟
بنية مرتبة تحتفظ بها قاعدة البيانات لأعمدة معينة، فتصل إلى الصفوف المطلوبة مباشرة دون قراءة الجدول كله.
متى تضيف فهرساً؟
- أعمدة الشرط
WHEREالتي تتكرر كثيراً. - أعمدة الربط
JOIN، ومنها المفاتيح الأجنبية. - أعمدة الترتيب
ORDER BYفي الاستعلامات الكبيرة.
الفهرس المركّب وترتيب الأعمدة
إن كان استعلامك يفلتر بالحالة ثم يرتب بالتاريخ، فالفهرس على (status, created_at) أنسب من فهرسين منفصلين. ترتيب الأعمدة مهم: يُستفاد من الفهرس من أول عمود فيه.
CREATE INDEX idx_orders_status_date ON orders (status, created_at);
EXPLAIN SELECT * FROM orders WHERE status = 'paid' ORDER BY created_at DESC LIMIT 20;استخدم EXPLAIN
أضفها قبل الاستعلام لترى هل استُخدم الفهرس وكم صفاً سيُفحص. إن رأيت ALL في نوع الوصول فهذا فحص كامل.
لا تُفرط
كل فهرس يبطئ الإدراج والتحديث ويستهلك مساحة. أضف ما تحتاجه فعلاً، وأزل الفهارس التي لا تُستخدم.
قِس قبل أن تفهرس: الفهرس الذي لا يخدم استعلاماً حقيقياً عبء بلا فائدة.



