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

Leading Wildcard and Implicit Casts مشكلة النجمة البادئة والتحويل

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

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

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

حتى لو كتبت العمود المفهرس مجرداً خارج الدوال، هناك فخّان صامتان يعطّلان فهارس B+Tree في الأنظمة الإنتاجية:

  • الفخ الأول (النجمة البادئة Leading Wildcard LIKE '%text'): عندما تبدأ عبارة المطابقة برمز النسبة المئوية %، يعجز الفهرس الشجري عن معرفة الحرف الأول الذي يبدأ منه البحث؛ بينما يعمل الفهرس بكفاءة تامة إذا كانت النجمة في النهاية فقط LIKE 'text%' (Prefix Match).
  • الفخ الثاني (التحويل الضمني للأنواع Implicit Type Conversion): إذا كان عمود phone أو national_id من النوع النصي VARCHAR، وكتبت في الاستعلام رقماً بدون علامتي تنصيص WHERE phone = 501234567، فإن MySQL يحوّل نص كل صف في الجدول إلى رقم لمقارنته، مما يبطل الفهرس تماماً ويحوله إلى فحص كامل type = ALL!
SQL
EXPLAIN SELECT customer_id, full_name, phone FROM customers WHERE phone LIKE '050123%';