استخدم الفهرس يا لوقا! › الحساب 30 / 139 السابق التالي

الرياضيات

هناك فئة أخرى من التعتيم ذكية وتمنع الاستخدام السليم للفهرس. فهي لا تستخدم تعبيرات منطقية بل عملية حسابية.

تأمّل العبارة التالية. هل يمكنها استخدام فهرس على 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)