شرح صفوف ومحتوى الفقرة
عندما تنفّذ استعلام SELECT يحتوي على شرط تصفية WHERE فوق عمود غير مفهرس (Unindexed Column)، يضطر محرك InnoDB في MySQL 8.4 إلى إجراء فحص كامل للجدول (Full Table Scan). في هذا المسار، يقرأ المحرك جميع صفحات البيانات الفيزيائية (وحجم كل صفحة افتراضياً 16 KB) بالتتابع من أول صف حتى آخر صف للتحقق من تطابق الشرط.
لماذا يمثّل الفحص الكامل عنق زجاجة خطيراً في قواعد البيانات الإنتاجية؟
- نمو الزمن خطياً
O(N): إذا كان البحث في1,000صف يستغرق ملي ثانية واحدة، فإن البحث في10,000,000صف سيستغرق عدة ثوانٍ لكل طلب مستخدم. - إغراق ذاكرة Buffer Pool: قراءة آلاف الصفحات من القرص الصلب تطرد الصفحات الساخنة النشطة من ذاكرة التخزين المؤقت في InnoDB.
- استهلاك المعالج والإدخال/الإخراج (Disk I/O): فحص ملايين الصفوف لاسترجاع صف واحد فقط يهدر دورات المعالج ويبطئ الاستعلامات المتزامنة الأخرى.
SQL
SELECT customer_id, full_name, city FROM customers WHERE phone = '0501234567';