الرياضيات
هناك فئة أخرى من التعتيم ذكية وتمنع الاستخدام السليم للفهرس. فهي لا تستخدم تعبيرات منطقية بل عملية حسابية.
تأمّل العبارة التالية. هل يمكنها استخدام فهرس على NUMERIC_NUMBER؟
SELECT numeric_number
FROM table_name
WHERE numeric_number - 1000 > ?
وبالمثل، هل يمكن للعبارة التالية استخدام فهرس على A وB—وأنت تختار الترتيب؟
SELECT a, b
FROM table_name
WHERE 3*a + 5 = b
لنضع هذين السؤالين في منظور مختلف؛ لو كنت تطوّر قاعدة بيانات (database) SQL، هل ستضيف حلال معادلات؟ معظم موردي قواعد البيانات يقولون ببساطة «لا!»، وبالتالي لا يستخدم أي من المثالين الفهرس.
إن أعجبك هذا الموضوع، قد يعجبك أيضاً…
… أن تشترك في القوائم البريدية، وتحصل على ملصقات مجانية، وتشتري كتابي، أو تنضم إلى دورة تدريبية.
يمكنك حتى استخدام الرياضيات لتعتيم شرط عن قصد—كما فعلنا سابقاً في البحث النصي الكامل بـLIKE. ويكفي إضافة صفر، مثلاً:
SELECT numeric_number
FROM table_name
WHERE numeric_number + 0 = ?
ومع ذلك يمكننا فهرسة هذه التعبيرات بـفهرس قائم على دالة إذا استخدمنا الحسابات بذكاء وحوّلنا عبارة where كما نحل معادلة:
SELECT a, b
FROM table_name
WHERE 3*a - b = -5
لقد نقلنا مراجع الجدول إلى طرف والمعاملات الثابتة إلى الطرف الآخر. ثم يمكننا إنشاء فهرس قائم على دالة للطرف الأيسر من المعادلة:
CREATE INDEX math ON table_name (3*a - b)