الIndexes في قواعد البيانات عبارة عن B-Tree مثلها مثل الTables لكن مخفية و ظيفتها مثل وظيفة الفهرس في اخر الكتاب ( الفهرس الأبجدي وليس المحتويات) به كلمات keywords و الصفحات التي ذكرت بها الكلمة. نفس الشيء في قواعد البيانات فالفهرس يشير عبر pointer الى الpages.
(سلسلة)
(سلسلة)
صفحات الكتاب في الاصل مرتبه و مرقمه لكن في الداتابيز الامر مختلف فالصفحات هناك عباره عن جذع شجرة و الاسطر في اوراقها. لذا احتجنا الى الB-Tree للبحث. مع الوقت و مع اضافة سجلات جديدة للجداول يصبح هذا الفهرس عديم الفائدة و يحتاج الى Rebuild لاعادة بنائها من جديد.
عندما تكتب جملة SQL و تضع حقلاً بعد Where فقاعدة البيانات ستبحث فيه مباشرة لكن إن كان هناك Index مرتب سيكون البحث من خلاله اسرع. ليس هذا موضوعنا وانما السبب الذي فرض علينا وجود الIndex بالاساس.
لوعدنا لمثال الكتاب و لم يكن هناك فهرس فسنتظر للبحث seeking في كل صفحة بالترتيب لنجد الكلمة التي نبحث عنها.
عملية الSeeking هذه هي تماما مايقوم به الHardisk التقليدي فهو لا يستطيع البحث عشوائياً كون البيانات مخزنه في sectors طولية تمر على ابرة القراءة. ولذا ينصح بعملية Defragment تقوم بركم البيانات التي لها علاقة ببعضها في امكان قريبة من بعضها.
لكن مع وجود الSSD و الذي يمكن الوصول العشوائي ما الفائدة من الIndexes؟ او على الأقل من الRebuilding لها او من الDefragment؟
مازال هناك بالتأكيد حاجة لوجود الIndexes في اغلب قواعد البيانات و الفرق في الاداء واضح حتى التي في الMemory مثل Redis لكن الIndexes فيها مختلفه. هل مازالت قواعد البيانات تتبع نهجاً قديماً كون الHardisk مازال موجوداً في كثير من الDatacenters؟ هناك الكثير من الآراء.
من لديه اجابه؟
من لديه اجابه؟
جاري تحميل الاقتراحات...