شرح صفوف ومحتوى الفقرة
من أكثر الأخطاء شيوعاً في قواعد البيانات أن ينشئ المطور فهرساً صحيحاً على عمود التاريخ 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'(يبقي العمود المفهرس مجرداً على اليسار فيقفز الفهرس للنطاق فوراً).
SQL
SELECT * FROM orders WHERE created_at >= '2026-01-01' AND created_at < '2027-01-01';