شرح صفوف ومحتوى الفقرة
لماذا لا نضع فهرساً على كل عمود في الجدول؟ لأن كل فهرس ثانوي تضيفه هو شجرة B+Tree حقيقية يجب على محرك InnoDB تحديثها وإعادة موازنتها في كل مرة ينفّذ فيها عملية كتابة (INSERT أو UPDATE أو DELETE). فإذا كان لديك جدول يضم 12 فهرساً ثانوياً، فإن إدراج صف واحد في الجدول يتطلب إدراج 13 عقدة في 13 شجرة مختلفة!
يوضّح الجدول المرجعي التالي المقارنة الشاملة بين مسارات البحث وأنواع الفهارس الأساسية في MySQL 8.4:
| طريقة الوصول / الفهرس | التعقيد الزمني | محتوى العقدة الورقية (Leaf) | تأثير القراءة والكتابة |
|---|---|---|---|
| الفحص الكامل (Full Table Scan) | O(N) خطي | قراءة كافة صفحات الجدول بالتتابع | بطيء جداً في القراءة؛ لا يضيف عبء كتابة |
المفتاح العنقودي (PRIMARY KEY) | O(log N) لوغاريتمي | كامل أعمدة الصف الفيزيائي | أسرع قراءة مباشرة؛ فهرس واحد لكل جدول |
الفهرس الثانوي (Secondary BTREE) | O(log N) + Bookmark | قيمة العمود المفهرس + قيمة PRIMARY KEY | يسرّع القراءة والفرز؛ يزيد كلفة INSERT/UPDATE/DELETE |
| فحص الفهارس الحالية | SHOW INDEX FROM tbl | يعرض Key_name وCardinality | أداة تشخيصية لمراجعة الفهارس الزائدة |
| حذف فهرس غير مستخدم | DROP INDEX idx ON tbl | يزيل شجرة الفهرس الثانوي من القرص | يحرر مساحة القرص ويسرّع عمليات الكتابة |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
فهمت في هذا الدرس تكلفة الفحص الكامل للجدول O(N)، وكيف تعمل شجرة البحث المتوازنة B+Tree بتعقيد O(log N)، والفرق الجوهري بين الفهرس العنقودي PRIMARY KEY والفهارس الثانوية التي تخزن مؤشرات للمفتاح الأساسي، وكيفية إنشاء وفحص وحذف الفهارس وموازنة سرعة القراءة مع كلفة الكتابة.
الخطوة التالية والدرس القادم
في الدرس القادم سنتعلم كيفية تصميم الفهارس المركبة متعددة الأعمدة (Composite Indexes)، وقاعدة البادئة اليسرى، والفهارس غير المرئية، وفهارس النص الكامل.