indexing b-tree database backend performance

Database Indexing

سرعة استعلامات قاعدة البيانات ممكن تكون الفرق بين تطبيق سريع ومريح… أو بطيء ومتعب ، وهنا بييجي دور Database Indexing — طريقة ذكية بتنظم البيانات بحيث تقدر توصل للمعلومة المطلوبة بسرعة من غير ما تحتاج تشوف الجدول كله.

تم التحديث في 2024-02-27
تعديل على GitHub
Database Indexing

تخيل ان عندنا مجموعة ضخمة من الكتب , والكتب دي محطوطة على أرفف المكتبة بشكل عشوائي تمامًا , تقدر تتخيل مدى صعوبة أن كل شوية اما نحتاج ندور على كتاب معين هتكون عاملة ازاي ؟ 

الموضوع هيكون صعب جدًا مش كده ؟ 

عشان كده لولا الـ Indexing في الـ Database كان زمانا دلوقتي في كل Web Page محتاجين نعمل عليها أي عملية متطلبة انها تـ Fetch Data من الـ Database مستنيين كتيير ومش بعيد بالساعات على ما العملية تتم بنجاح

ما هو الـ Indexing ؟ 

خلونا نرجع لمثال المكتبة والكتب المحطوطة بشكل عشوائي , ايه رأيكوا لو عملنا تغير بسيط هنا , وهو أننا هنبدأ نعمل فهرسة للأرفف دي , ونديلها ارقام بناء على اسامي عناوين الكتب , وليكن عناوين الكتب اللي بادئة بحرف A تبدا من الرف رقم كذا لرقم كذا ,, مش الموضوع هيكون اسهل ؟ 

طب ماذا لو زودنا كمان طريقة للفهرسة وهي إننا نحدد الأرفف من خلال الأرقم + نحط كل Category مع بعض , يعني كتب التاريخ في مكان وكتب علم النفس في مكان , والروايات في مكان تاني ,, وكل واحد من دول هيترقم برضو وفقًا لعنوان الكتاب والحروف الأبجدي ,, 

مش كده الموضوع هيبقى ـسهل كتير ؟ لو انطلب مننا ندور على كتاب دلوقتي , كل اللي محتاجين نعرفه هو بيتكلم في مجال إيه + عنوانه عشان نعرف أول حرف من اسمه , وبالتالي هنروح للمكان المطلوب,, 

فبدل ما نروح نعدي على كل كتب المكتبة عشان ندور عليه , روحنا لمكان مخصص ومحدد بعينه واحنا واثقين تماما اننا هنلاقي الكتاب ده هناك , لانه محطوط Physically هناك على الرف ده,, 

وهي دي ببساطة فكرة الـ Indexing


شكل ال Indexing في عالم الـ Database 

تخيل دلوقتي قاعدة بيانات بحجم Facebook أو قاعدة بيانات لشركة وفيها عدد من الموظفين , لو انت بتدور على فلان , فهل هتحب ان قاعدة البيانات تاخد الـ Query بتاعتك وتروح تعدي عليهم كلهم واحد واحد لحد ما تلاقيه ؟ طب لو هم كانوا ملايين من الناس ؟ الموضوع هيقعد بالدقايق وممكن يطول صح ؟ 

فاحنا عشان نسرع من عملية البحث دي ونجيب الـ Data بسرعة ونحسن من أداء الـ Query بنتجه لاننا نعمل حاجة اسمها Indexing عاملة بالظبط زي موضوع ترتيب الكتب في المكتبة , وهي هياها الـ Index في الكتاب اللي بتبص عليه عشان تروح لصفحة بعينها ( عرفتوا دلوقتي فكرتها جت منين ؟ ) 

فمن خلال الـ Indexing بنقول للـ Database الجدول اللي اسمه Employees أو Users انا عاوز اعمل فهرس عليه من خلال الـ Firstname أو والله محتاج اعمل فهرس عليه من خلال Field تاني أنا مهتم بيه ,, 

وده لأني هعمل عمليات قراءة كتير هتطلب إني ادور بالـ Field ده مثلا , فتقوم الـ Database هنا عاملة حاجة جميلة اوي , بتديلك خيارين حاجة اسمها Clustered Index وخيار تاني اسمه Non-Clustered Index


ما الفرق بين الـ Clustered Index و الـ Non-Clustered Index

الـ Clustered Index دي الـ Data Physically متفهرسة ازاي على الـ Disk اما الـ Non-Clustered Index وده بيكون Pointer لمكان الـ Data على الـ Disk وليس الـ Data Physically , فبيكون زي فهرس شايل عنوان البيانات موجودة فين بالظبط.


مواضيع ذات صلة
Databases & Storage

اشترك في النشرة البريدية

احصل على أحدث المحتوى والأخبار مباشرة في بريدك الإلكتروني

🔒 نحترم خصوصيتك. لن نشارك بريدك الإلكتروني مع أي طرف ثالث.