فهرس قاعدة البيانات
فهرس قاعدة البيانات هو بنية بيانات تُحسّن سرعة عمليات استرجاع البيانات من جدول قاعدة البيانات ، وذلك على حساب عمليات كتابة إضافية ومساحة تخزين أكبر للحفاظ على بنية بيانات الفهرس. [ 1 ] تُستخدم الفهارس لتحديد موقع البيانات بسرعة دون الحاجة إلى البحث في كل صف في جدول قاعدة البيانات في كل مرة يتم الوصول إلى هذا الجدول. يمكن إنشاء الفهارس باستخدام عمود واحد أو أكثر من أعمدة جدول قاعدة البيانات ، مما يوفر الأساس لكل من عمليات البحث العشوائية السريعة والوصول الفعال إلى السجلات المرتبة.
الفهرس هو نسخة من أعمدة بيانات محددة من جدول، مصمم لتمكين البحث بكفاءة عالية. يتضمن الفهرس عادةً "مفتاحًا" أو رابطًا مباشرًا إلى صف البيانات الأصلي الذي نُسخ منه، مما يسمح باسترجاع الصف كاملًا بكفاءة. تُعزز بعض قواعد البيانات إمكانيات الفهرسة من خلال السماح للمطورين بإنشاء فهارس على قيم الأعمدة التي تم تحويلها بواسطة دوال أو تعابير . على سبيل المثال، يمكن إنشاء فهرس على حقل معين upper(last_name)، والذي سيخزن فقط الأحرف الكبيرة من last_nameالحقل في الفهرس. خيار آخر مدعوم أحيانًا هو استخدام الفهرس الجزئي ، حيث تُنشأ إدخالات الفهرس فقط للسجلات التي تُحقق تعبيرًا شرطيًا معينًا. جانب آخر من المرونة هو السماح بالفهرسة على الدوال المُعرّفة من قِبل المستخدم ، بالإضافة إلى التعبيرات المُشكّلة من مجموعة متنوعة من الدوال المُدمجة.
الاستخدام
دعم البحث السريع
تتضمن معظم برامج قواعد البيانات تقنية الفهرسة التي تتيح البحث في وقت أقل من الخطي لتحسين الأداء، حيث أن البحث الخطي غير فعال لقواعد البيانات الكبيرة.
لنفترض أن قاعدة بيانات تحتوي على N عنصرًا من البيانات، ويجب استرجاع أحدها بناءً على قيمة أحد الحقول. يقوم تطبيق بسيط باسترجاع كل عنصر وفحصه وفقًا للاختبار. إذا وُجد عنصر واحد مطابق فقط، يمكن إيقاف العملية عند العثور عليه، ولكن في حال وجود عدة عناصر مطابقة، يجب فحص جميع العناصر. هذا يعني أن عدد العمليات في الحالة المتوسطة هو O (N) أو زمن خطي . نظرًا لأن قواعد البيانات قد تحتوي على العديد من الكائنات، ولأن البحث عملية شائعة، فمن المستحسن غالبًا تحسين الأداء.
الفهرس هو أي بنية بيانات تُحسّن أداء البحث. تُستخدم العديد من بنى البيانات المختلفة لهذا الغرض. توجد مفاضلات تصميمية معقدة تتعلق بأداء البحث، وحجم الفهرس، وأداء تحديث الفهرس. تُظهر العديد من تصميمات الفهرس أداء بحث لوغاريتمي ( O (log(N)))، وفي بعض التطبيقات يُمكن تحقيق أداء ثابت ( O (1)).
مراقبة قيود قاعدة البيانات
تُستخدم الفهارس للتحكم في قيود قواعد البيانات ، مثل UNIQUE وEXCLUSION و PRIMARY KEY و FOREIGN KEY . يمكن تعريف الفهرس على أنه UNIQUE، مما يُنشئ قيدًا ضمنيًا على الجدول الأساسي. عادةً ما تُنشئ أنظمة قواعد البيانات فهرسًا ضمنيًا على مجموعة من الأعمدة المُعرَّفة كـ PRIMARY KEY، وبعضها قادر على استخدام فهرس موجود مسبقًا للتحكم في هذا القيد. تتطلب العديد من أنظمة قواعد البيانات فهرسة كلٍّ من مجموعات الأعمدة المرجعية والمُشار إليها في قيد FOREIGN KEY، مما يُحسِّن أداء عمليات الإدراج والتحديث والحذف في الجداول المُشاركة في هذا القيد.
تدعم بعض أنظمة قواعد البيانات قيد الاستبعاد الذي يضمن أنه بالنسبة لسجل مُضاف أو مُحدّث حديثًا، لا ينطبق شرط معين على أي سجل آخر. يمكن استخدام هذا القيد لتطبيق قيد التفرد (مع شرط المساواة) أو قيود أكثر تعقيدًا، مثل ضمان عدم تخزين نطاقات زمنية متداخلة أو كائنات هندسية متقاطعة في الجدول. يتطلب تطبيق هذا القيد وجود فهرس يدعم البحث السريع عن السجلات التي تُحقق الشرط. [ 2 ]
بنية الفهرس وأساليب الفهرسة
غير مجمعة
تُعرض البيانات بترتيب عشوائي، لكن الترتيب المنطقي يُحدد بواسطة الفهرس. قد تتوزع صفوف البيانات في جميع أنحاء الجدول بغض النظر عن قيمة العمود أو التعبير المفهرس. تحتوي شجرة الفهرس غير المجمعة على مفاتيح الفهرس مرتبةً، حيث يحتوي مستوى الورقة في الفهرس على مؤشر السجل (الصفحة ورقم الصف في صفحة البيانات في محركات التخزين المنظمة بالصفحات؛ وإزاحة الصف في محركات التخزين المنظمة بالملفات).
في فهرس غير مجمع،
- الترتيب الفعلي للصفوف ليس هو نفسه ترتيب الفهرس.
- الأعمدة المفهرسة هي عادةً أعمدة غير مفتاح أساسي تُستخدم في عبارات JOIN و WHERE و ORDER BY.
يمكن أن يكون هناك أكثر من فهرس غير مجمع واحد على جدول قاعدة البيانات.
متجمعة
يُغيّر التجميع ترتيب كتلة البيانات ليطابق الفهرس، مما يؤدي إلى تخزين بيانات الصفوف بالترتيب الصحيح. لذلك، لا يمكن إنشاء سوى فهرس مُجمّع واحد على جدول قاعدة بيانات مُحدد. يُمكن للفهارس المُجمّعة أن تُحسّن سرعة الاسترجاع بشكل كبير، ولكن عادةً فقط عند الوصول إلى البيانات بشكل تسلسلي بنفس ترتيب الفهرس المُجمّع أو بترتيب عكسي، أو عند تحديد نطاق من العناصر.
بما أن السجلات الفعلية مُرتبة بهذا الشكل على القرص، فإن العنصر التالي في التسلسل يكون مباشرةً قبل أو بعد العنصر الأخير، وبالتالي تقل الحاجة إلى قراءة كتل البيانات. لذا، فإن السمة الأساسية للفهرس المُجمّع هي ترتيب صفوف البيانات الفعلية وفقًا لكتل الفهرس التي تُشير إليها. بعض قواعد البيانات تفصل كتل البيانات والفهرس في ملفات منفصلة، بينما تضع قواعد بيانات أخرى كتلتين مختلفتين تمامًا من البيانات ضمن نفس الملف الفعلي (أو الملفات).
تَجَمَّع
عند ربط قواعد بيانات وجداول متعددة، يُطلق على هذه العملية اسم " مجموعة" (لا ينبغي الخلط بينها وبين الفهرس المُجمّع الموصوف سابقًا). تُخزّن سجلات الجداول التي تشترك في قيمة مفتاح المجموعة معًا في نفس كتلة البيانات أو في كتل بيانات متجاورة. قد يُحسّن هذا من عمليات ربط هذه الجداول باستخدام مفتاح المجموعة، نظرًا لتخزين السجلات المتطابقة معًا، مما يُقلّل من عمليات الإدخال/الإخراج المطلوبة لتحديد موقعها. [ 3 ] يُحدّد تكوين المجموعة تخطيط البيانات في الجداول التي تُشكّل جزءًا منها. يمكن فهرسة المجموعة باستخدام فهرس شجرة B أو جدول تجزئة . تُحدّد قيمة مفتاح المجموعة كتلة البيانات التي يُخزّن فيها سجل الجدول.
ترتيب الأعمدة
يُعدّ ترتيب تعريف الأعمدة في الفهرس أمرًا بالغ الأهمية. فمن الممكن استرجاع مجموعة من مُعرّفات الصفوف باستخدام العمود الأول المفهرس فقط. مع ذلك، ليس من الممكن أو الفعال (في معظم قواعد البيانات) استرجاع مجموعة مُعرّفات الصفوف باستخدام العمود الثاني المفهرس أو الأعمدة اللاحقة فقط.
على سبيل المثال، في دليل هاتف مُرتب حسب المدينة أولًا، ثم حسب اسم العائلة، ثم حسب الاسم الأول، يُمكن استخراج قائمة بجميع أرقام الهواتف في مدينة مُعينة بسهولة. مع ذلك، سيكون من المُرهق جدًا البحث عن جميع أرقام الهواتف التي تحمل اسم عائلة مُعين. سيتعين البحث داخل قسم كل مدينة عن البيانات التي تحمل هذا الاسم. بعض قواعد البيانات تُتيح هذه الخاصية، بينما لا تستخدم قواعد بيانات أخرى الفهرس.
في مثال دليل الهاتف مع فهرس مُركّب مُنشأ على الأعمدة ( city, last_name, first_name)، إذا بحثنا بإدخال قيم دقيقة لجميع الحقول الثلاثة، يكون وقت البحث ضئيلاً للغاية. أما إذا أدخلنا قيم الحقلين cityو first_nameفقط، فسيستخدم البحث cityالحقل فقط لاسترجاع جميع السجلات المطابقة. ثم يتحقق بحث تسلسلي من التطابق مع first_name. لذا، لتحسين الأداء، يجب التأكد من إنشاء الفهرس بترتيب أعمدة البحث.
التطبيقات والقيود
تُعدّ الفهارس مفيدةً للعديد من التطبيقات، ولكنها تنطوي على بعض القيود. لنأخذ على سبيل المثال عبارة SQL التالية: . لمعالجة هذه العبارة بدون فهرس، يجب على برنامج قاعدة البيانات فحص عمود last_name في كل صف من صفوف الجدول (وهذا ما يُعرف بمسح الجدول الكامل ). أما مع وجود فهرس، فإن قاعدة البيانات تتبع ببساطة بنية بيانات الفهرس (عادةً ما تكون شجرة B ) حتى يتم العثور على مدخل Smith؛ وهذا أقل تكلفةً حسابيةً بكثير من مسح الجدول الكامل.SELECTfirst_nameFROMpeopleWHERElast_name='Smith';
لنفترض عبارة SQL التالية: . سيُظهر هذا الاستعلام عنوان بريد إلكتروني لكل عميل ينتهي عنوان بريده الإلكتروني بـ "@wikipedia.org"، ولكن حتى لو تم فهرسة عمود email_address، يجب على قاعدة البيانات إجراء مسح كامل للفهرس. وذلك لأن الفهرس مبني على افتراض أن الكلمات تُكتب من اليسار إلى اليمين. عند استخدام حرف بدل في بداية مصطلح البحث، لا يستطيع برنامج قاعدة البيانات استخدام بنية بيانات الفهرس الأساسية (بمعنى آخر، لا يمكن البحث في عبارة WHERE ). يمكن حل هذه المشكلة بإضافة فهرس آخر مُنشأ على واستعلام SQL كالتالي: . هذا يضع حرف البدل في أقصى يمين الاستعلام (الآنSELECTemail_addressFROMcustomersWHEREemail_addressLIKE'%@wikipedia.org';reverse(email_address)SELECTemail_addressFROMcustomersWHEREreverse(email_address)LIKEreverse('%@wikipedia.org');gro.aidepikiw@%), والتي يمكن أن يفي بها الفهرس الموجود على reverse(email_address).
عند استخدام أحرف البدل على جانبي كلمة البحث مثل %wikipedia.org% ، لا يتم استخدام الفهرس المتاح في هذا الحقل. بل يتم إجراء بحث تسلسلي فقط، والذي يستغرق الوقت .
للتخفيف من هذه المشكلة، يمكن استخدام أسلوب فهرسة النص الكامل. على سبيل المثال، يمكن تقسيم النص إلى ثلاثيات (أجزاء من 3 أحرف) وتخزينها في فهرس معكوس معمّم (GIN ) لتقليل تعقيد البحث إلى حواليوقت
أنواع الفهارس
فهرس الصور النقطية
يُعدّ فهرس الخرائط النقطية نوعًا خاصًا من الفهرسة، حيث يُخزّن الجزء الأكبر من البيانات على شكل مصفوفات بتية (خرائط نقطية)، ويُجيب على معظم الاستعلامات بإجراء عمليات منطقية على مستوى البتات على هذه الخرائط. وتكون الفهارس الأكثر شيوعًا، مثل أشجار B+ ، أكثر كفاءةً عندما لا تتكرر القيم التي تُفهرسها أو تتكرر عددًا قليلًا من المرات. في المقابل، صُمّم فهرس الخرائط النقطية للحالات التي تتكرر فيها قيم متغير ما بشكل متكرر. على سبيل المثال، يحتوي حقل الجنس في قاعدة بيانات العملاء عادةً على ثلاث قيم مميزة على الأكثر: ذكر، أنثى، أو غير معروف (غير مُسجّل). بالنسبة لهذه المتغيرات، يُمكن أن يُحقق فهرس الخرائط النقطية ميزة أداء كبيرة مقارنةً بالأشجار الشائعة الاستخدام.
فهرس كثيف
الفهرس الكثيف في قواعد البيانات هو ملف يحتوي على أزواج من المفاتيح والمؤشرات لكل سجل في ملف البيانات. يرتبط كل مفتاح في هذا الملف بمؤشر معين إلى سجل في ملف البيانات المُرتّب. في الفهارس المُجمّعة ذات المفاتيح المُكرّرة، يُشير الفهرس الكثيف إلى أول سجل يحمل ذلك المفتاح. [ 4 ]
فهرس متفرق
الفهرس المتفرق في قواعد البيانات هو ملف يحتوي على أزواج من المفاتيح والمؤشرات لكل كتلة في ملف البيانات. يرتبط كل مفتاح في هذا الملف بمؤشر محدد إلى الكتلة في ملف البيانات المُرتّب. في الفهارس المُجمّعة ذات المفاتيح المُكرّرة، يُشير الفهرس المتفرق إلى أدنى مفتاح بحث في كل كتلة.
الفهرس العكسي
يقوم فهرس المفتاح العكسي بعكس قيمة المفتاح قبل إدخالها في الفهرس. على سبيل المثال، تصبح القيمة 24538 هي 83542 في الفهرس. يُعدّ عكس قيمة المفتاح مفيدًا بشكل خاص لفهرسة بيانات مثل أرقام التسلسل، حيث تتزايد قيم المفاتيح الجديدة بشكل مطرد.
مؤشر معكوس
يقوم الفهرس المعكوس بربط كلمة المحتوى بالوثيقة التي تحتوي عليها، مما يسمح بإجراء عمليات بحث في النص الكامل.
الفهرس الأساسي
يحتوي الفهرس الأساسي على الحقول الرئيسية للجدول ومؤشر إلى الحقول غير الرئيسية. ويتم إنشاء الفهرس الأساسي تلقائيًا عند إنشاء الجدول في قاعدة البيانات.
الفهرس الثانوي
يُستخدم هذا النوع من الفهرسة لفهرسة الحقول التي لا تُعدّ حقول ترتيب ولا حقول مفاتيح (إذ لا يوجد ما يضمن تنظيم الملف بناءً على حقل مفتاح أو حقل مفتاح أساسي). يحتوي كل سجل في ملف البيانات (فهرس كثيف) على مدخل فهرس واحد، يتضمن قيمة السمة المفهرسة ومؤشرًا إلى الكتلة أو السجل.
مؤشر التجزئة
التجزئة الخطية
نوع آخر من الفهارس المستخدمة في أنظمة قواعد البيانات هو التجزئة الخطية .
تطبيقات الفهرسة
يمكن تنفيذ الفهارس باستخدام مجموعة متنوعة من هياكل البيانات. تشمل الفهارس الشائعة الأشجار المتوازنة ، وأشجار B+، والجداول التجزئية . [ 5 ]
في Microsoft SQL Server ، تُشير عقدة الورقة في الفهرس المُجمّع إلى البيانات الفعلية، وليس مجرد مؤشر إلى بيانات موجودة في مكان آخر، كما هو الحال في الفهرس غير المُجمّع. [ 6 ] يمكن أن تحتوي كل علاقة على فهرس مُجمّع واحد والعديد من الفهارس غير المُجمّعة. [ 7 ]
التحكم في تزامن الفهرس
عادةً ما يتم الوصول إلى الفهرس بشكل متزامن من قبل عدة معاملات وعمليات، وبالتالي فهو يحتاج إلى التحكم في التزامن . وبينما يمكن للفهارس من حيث المبدأ استخدام أساليب التحكم في التزامن الشائعة في قواعد البيانات، توجد أساليب تحكم متخصصة للفهارس، تُطبق بالتزامن مع الأساليب الشائعة لتحقيق تحسين كبير في الأداء.
فهرس التغطية
في معظم الحالات، يُستخدم الفهرس لتحديد موقع سجلات البيانات التي تُقرأ منها البيانات المطلوبة بسرعة. بعبارة أخرى، يُستخدم الفهرس فقط لتحديد موقع سجلات البيانات في الجدول وليس لاسترجاع البيانات.
الفهرس الشامل هو حالة خاصة حيث يحتوي الفهرس نفسه على حقول البيانات المطلوبة ويمكنه الإجابة على البيانات المطلوبة.
انظر إلى الجدول التالي (مع حذف الحقول الأخرى):
| بطاقة تعريف | اسم | مجالات أخرى |
|---|---|---|
| 12 | سدادة | ... |
| 13 | خروف | ... |
| 14 | الفيوز | ... |
للعثور على اسم صاحب المعرّف 13، يُعدّ الفهرس على (المعرّف) مفيدًا، ولكن لا يزال من الضروري قراءة السجل للحصول على الاسم. مع ذلك، يحتوي الفهرس على (المعرّف، الاسم) على حقل البيانات المطلوب، مما يُغني عن الحاجة إلى البحث في السجل.
تُخصص كل فهرسة تغطية لجدول محدد. قد تتطلب الاستعلامات التي تستخدم الربط/الوصول عبر جداول متعددة، استخدام فهارس تغطية على أكثر من جدول واحد من هذه الجداول. [ 8 ]
يمكن للفهرس الشامل أن يُسرّع استرجاع البيانات بشكلٍ كبير، ولكنه قد يكون كبيرًا جدًا نظرًا للمفاتيح الإضافية، مما يُبطئ عملية إدخال البيانات وتحديثها. ولتقليل حجم هذا الفهرس، تسمح بعض الأنظمة بتضمين الحقول غير الرئيسية فيه. لا تُعدّ هذه الحقول جزءًا من ترتيب الفهرس، وإنما تُضاف فقط على مستوى الأوراق، مما يُتيح فهرسًا شاملًا بحجم إجمالي أصغر.
يمكن القيام بذلك في لغة SQL باستخدام . [ 9 ] [ 10 ]CREATEINDEXmy_indexONmy_table(id)INCLUDE(name);
التقييس
لا يوجد معيار محدد لكيفية إنشاء الفهارس، لأن معيار ISO SQL لا يغطي الجوانب المادية. تُعد الفهارس أحد المكونات المادية لقواعد البيانات، إلى جانب مكونات أخرى كالتخزين (مساحة الجداول أو مجموعات الملفات). يوفر كل مُورّد لأنظمة إدارة قواعد البيانات العلائقية صيغةً تتضمن خيارات محددة تعتمد على إمكانيات برامجه.CREATEINDEX
انظر أيضاً
- قفل الفهرس
- الفهرس المعكوس - نوع من أنواع فهرس قاعدة البيانات
- فهرسة محركات البحث – طريقة لإدارة البيانات
مراجع
- ↑ ميتشل، سارة (2025-12-03). "كيف تُسرّع فهارس قواعد البيانات الاستعلامات؟" . أنظمة تيرابايت . تم الاسترجاع في 2025-12-04 .
- ↑ "إنشاء جدول" . وثائق PostgreSQL . 27 أكتوبر 2016.
- ↑ نظرة عامة على المجموعات في مفاهيم قاعدة بيانات أوراكل® الإصدار 10g الإصدار 1 (10.1)
- ↑ أنظمة قواعد البيانات: الكتاب الكامل. هيكتور غارسيا مولينا ، جيفري د. أولمان ، جينيفر د. ويدوم
- ↑ غافين باول (2006). الفصل 8: بناء نماذج قواعد بيانات سريعة الأداء . دار نشر وروكس . رقم ISBN 978-0-7645-7490-0أُرشف من المصدر الأصلي بتاريخ 18 أغسطس 2007. تم الاطلاع عليه بتاريخ 29 أبريل 2007 .
{{cite book}}تم|work=تجاهله ( مساعدة ) - ↑ "هياكل الفهرسة المجمعة" . كتب SQL Server 2005 على الإنترنت (سبتمبر 2007) . 4 أكتوبر 2012.
- ↑ دارين بينيك؛ راندي ديس؛ مايك هوتيك؛ خافيير لوريا؛ آدم ماتشانيك؛ أنطونيو سوتو؛ أدولفو ويرنيك (يناير 2006). "الفصل 4: إنشاء الفهارس" . تنفيذ وإدارة SQL Server 2005. مطبعة مايكروسوفت.
- ↑ "تغطية الفهارس لتحسين الاستعلام | جافا الأدبية" . 13 يونيو 2016.
- ↑ "11.9. عمليات المسح التي تعتمد على الفهرس فقط والفهارس الشاملة" . وثائق PostgreSQL . 2023-02-09 . تم الاطلاع عليه بتاريخ 2023-04-08 .
- ↑ مايك راي، مايكروسوفت. "إنشاء فهارس مع أعمدة مضمنة - خادم SQL" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 8 أبريل 2023 .
- قواعد البيانات
- تقنيات فهرسة قواعد البيانات
- أنظمة إدارة قواعد البيانات
