انتقل إلى محتوى الدرس

Writing Sargable Filter Conditions كتابة شروط صديقة للفهرس

تعلّم تحسين أداء الاستعلامات وأفضل ممارسات الفهرسة في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

من أكثر الأخطاء شيوعاً في قواعد البيانات أن ينشئ المطور فهرساً صحيحاً على عمود التاريخ created_at أو السعر unit_price، ثم يكتب شرط WHERE يغلف العمود داخل دالة مثل WHERE YEAR(created_at) = 2026 أو معادلة حسابية مثل WHERE unit_price + 50 > 200! عندئذٍ يفقد محرك MySQL القدرة على استخدام شجرة B+Tree لأن الفهرس يخزن قيم created_at الخام وليس ناتج دالة YEAR().

يُسمى الشرط الذي يسمح للمحرك بالبحث المباشر في شجرة الفهرس شرطاً صديقاً للفهرس (Sargable Predicate — اختصاراً لـ Search Argument Able):

  • غير صديق للفهرس (Non-Sargable): WHERE YEAR(created_at) = 2026 (يجبر المحرك على فحص كل صف وحساب الدالة).
  • صديق للفهرس (Sargable): WHERE created_at >= '2026-01-01' AND created_at < '2027-01-01' (يبقي العمود المفهرس مجرداً على اليسار فيقفز الفهرس للنطاق فوراً).
مخطط تحسين أداء الاستعلامات وأفضل ممارسات الفهرسة في MySQL
SQL
SELECT * FROM orders WHERE created_at >= '2026-01-01' AND created_at < '2027-01-01';