MongoDB الفهرسة: إنشاء الفهرس() وحذف الفهرس()

⚡ ملخص ذكي

MongoDB تُخزّن الفهارس مجموعة فرعية مُرتبة من حقول المجموعة، مما يُتيح للاستعلامات تحديد موقع المستندات دون الحاجة إلى فحص كل سجل. تقوم طرق createIndex و getIndexes و dropIndex بإنشاء هذه الهياكل بالغة الأهمية للأداء، وعرضها، وإزالتها.

  • 🚀 الغرض: المؤشرات let MongoDB تخطَّ عمليات المسح الكاملة للمجموعة لقراءة أسرع.
  • 🛠️ إنشاء فهرس: يقوم بإنشاء فهارس أحادية الحقل أو مركبة بترتيب تصاعدي أو تنازلي.
  • 🔍 getIndexes: يعرض كل فهرس في المجموعة، بما في ذلك _id الافتراضي.
  • 🗑️ dropIndex: يزيل فهرسًا واحدًا؛ يمسح الأمر dropIndexes جميع الفهارس باستثناء _id.
  • 🇧🇷 التنازل عن ميزة ممن أجل الحصول على أخرى: يؤدي وجود عدد كبير جدًا من الفهارس إلى إبطاء عمليات الإدراج والتحديث والحذف.
  • 🤖 ضبط الذكاء الاصطناعي: يقوم المساعدون بالتوصية بالفهارس المناسبة وإنشائها تلقائيًا.

MongoDB إنشاء فهرس، حذف فهرس

ما هي MongoDB الفهارس؟

الفهارس مهمة جدًا في أي قاعدة بيانات، ومع MongoDB الأمر لا يختلف. باستخدام الفهارس، يتم تنفيذ الاستعلامات في MongoDB يصبح أكثر كفاءة.

إذا كان لديك مجموعة تضم آلاف المستندات بدون فهارس، ثم قمت بالاستعلام للعثور على مستندات معينة، ففي مثل هذه الحالة MongoDB سوف تحتاج إلى مسح المجموعة بأكملها للعثور على المستندات. ولكن إذا كان لديك فهارس، MongoDB سوف تستخدم هذه الفهارس للحد من عدد الوثائق التي يجب البحث فيها في المجموعة.

الفهارس عبارة عن مجموعات بيانات خاصة تخزن جزءًا من بيانات المجموعة. ولأن البيانات جزئية، يصبح من الأسهل قراءتها. تخزن هذه المجموعة الجزئية قيمة حقل معين، أو مجموعة من الحقول، مرتبة حسب قيمة ذلك الحقل.

فهم تأثير الفهارس

على الرغم من أن المقدمة قد أظهرت أن الفهارس مفيدة للاستعلامات، إلا أن وجود عدد كبير جدًا من الفهارس يمكن أن يبطئ العمليات الأخرى مثل عمليات الإدراج والحذف والتحديث.

إذا كانت هناك عمليات إدراج وحذف وتحديث متكررة يتم تنفيذها على المستندات، فإن الفهارس ستحتاج إلى التغيير بهذه الكثرة، وهو ما سيكون مجرد عبء إضافي على المجموعة.

يوضح المثال أدناه قيم الحقول التي يمكن أن تشكل فهرسًا في مجموعة بيانات. يمكن أن يستند الفهرس إما إلى حقل واحد فقط في المجموعة، أو إلى عدة حقول فيها.

في المثال أدناه، رقم الموظف "1" والموظفCode تُستخدم الفهارس "AA" لفهرسة المستندات في المجموعة. لذا، عند إجراء بحث استعلامي، ستُستخدم هذه الفهارس للعثور بسرعة وكفاءة على المستندات المطلوبة في المجموعة.

لذا حتى لو كان استعلام البحث يعتمد على الموظفCode "AA"، سيتم إرجاع تلك الوثيقة.

فهم تأثير الفهارس

كيفية إنشاء الفهارس: createIndex()

إنشاء فهرس في MongoDB يتم باستخدام createIndex الأسلوب.

يوضح المثال التالي كيفية إضافة فهرس إلى مجموعة. لنفترض أن لدينا نفس مجموعة الموظفين، والتي تحتوي على اسمي الحقلين "Employeeid" و"EmployeeName".

إنشاء الفهارس باستخدام createIndex

db.Employee.createIndex({Employeeid:1})

Code التفسير:

  1. استخدم createIndex يتم استخدام الطريقة لإنشاء فهرس بناءً على "Employeeid" الخاص بالمستند.
  2. يشير المعامل "1" إلى أنه عند إنشاء الفهرس باستخدام قيم حقل "Employeeid"، يجب فرزها بترتيب تصاعدي. يُرجى ملاحظة أن هذا يختلف عن حقل _id (الذي يُعرّف كل مستند بشكل فريد) MongoDB يتم إنشاء الملفات تلقائيًا. سيتم الآن فرز المستندات وفقًا لرقم الموظف وليس حقل _id.

إذا تم تنفيذ الأمر بنجاح، فسيتم عرض المخرجات التالية:

الإخراج:

مخرجات إنشاء الفهرس

  1. يشير numIndexesBefore: 1 إلى عدد قيم الحقول في الفهارس قبل تنفيذ الأمر. تحتوي كل مجموعة على الحقل _id، الذي يُحتسب أيضًا كقيمة حقل، لذا فإن قيمة numIndexesBefore تساوي 1.
  2. يشير numIndexesAfter: 2 إلى عدد قيم الحقول في الفهارس بعد تنفيذ الأمر.
  3. يشير الناتج "ok: 1" إلى أن العملية كانت ناجحة، وتمت إضافة الفهرس الجديد إلى المجموعة.

يوضح الكود أعلاه كيفية إنشاء فهرس بناءً على قيمة حقل واحد، ولكن يمكن أيضًا إنشاء فهرس بناءً على قيم حقول متعددة. يوضح المثال التالي كيفية القيام بذلك:

إنشاء فهرس مركب على حقول متعددة

db.Employee.createIndex({Employeeid:1, EmployeeName:1})

تأخذ دالة createIndex الآن في الاعتبار قيم حقول متعددة، مما يؤدي إلى إنشاء الفهرس بناءً على "Employeeid" و"EmployeeName". يشير Employeeid:1 وEmployeeName:1 إلى أنه يجب إنشاء الفهرس بناءً على قيمتي الحقلين هاتين، حيث يشير :1 إلى الترتيب التصاعدي. يُعرف هذا النوع من الفهرس بالفهرس المركب.

كيفية إيجاد الفهارس: getIndexes()

إيجاد فهرس في MongoDB يتم باستخدام الحصول على الفهارس الطريقة. يوضح المثال التالي كيفية القيام بذلك:

ابحث عن الفهارس باستخدام getIndexes

db.Employee.getIndexes()

يتم استخدام طريقة getIndexes للعثور على كافة الفهارس في المجموعة.

إذا تم تنفيذ الأمر بنجاح، فسيتم عرض المخرجات التالية:

الإخراج:

مخرجات getIndexes

تُظهر المخرجات مستندًا يُبين وجود فهرسين في المجموعة: حقل _id وحقل Employeeid. يشير الرمز :1 إلى أن قيم الحقول في الفهرس مُرتبة تصاعديًا.

كيفية حذف الفهارس: dropIndex()

إزالة فهرس في MongoDB يتم باستخدام dropIndex الطريقة. يوضح المثال التالي كيفية القيام بذلك:

حذف الفهارس باستخدام dropIndex

db.Employee.dropIndex({Employeeid:1})

تأخذ طريقة dropIndex قيم الحقول المطلوبة التي يجب إزالتها من الفهرس.

إذا تم تنفيذ الأمر بنجاح، فسيتم عرض المخرجات التالية:

الإخراج:

مخرجات dropIndex

  1. يشير nIndexesWas: 3 إلى عدد قيم الحقول في الفهارس قبل تنفيذ الأمر. تحتوي كل مجموعة على الحقل _id، والذي يُحتسب أيضًا كقيمة حقل.
  2. يشير الإخراج ok:1 إلى أن العملية كانت ناجحة، ويتم إزالة حقل "Employeeid" من الفهرس.

لإزالة جميع الفهارس دفعة واحدة من المجموعة، يمكن استخدام الأمر dropIndexes. يوضح المثال التالي كيفية القيام بذلك:

حذف جميع الفهارس باستخدام الأمر dropIndexes

db.Employee.dropIndexes()

سوف تقوم طريقة dropIndexes بإسقاط جميع الفهارس باستثناء فهرس _id.

إذا تم تنفيذ الأمر بنجاح، فسيتم عرض المخرجات التالية:

الإخراج:

مخرجات dropIndexes

  1. يشير nIndexesWas: 2 إلى عدد قيم الحقول في الفهارس قبل تشغيل الأمر.
  2. تحتوي كل مجموعة على حقل _id، والذي يُعتبر أيضًا قيمة حقل ولن تتم إزالته بواسطة MongoDBهذا ما تشير إليه هذه الرسالة.
  3. يشير الإخراج ok:1 إلى أن العملية كانت ناجحة.

الأسئلة الشائعة

يُستخدم فهرس الحقل الواحد لفرز حقل واحد، وهو مناسب للاستعلامات التي تُصفّي البيانات بناءً على هذا الحقل فقط. أما الفهرس المركب، فيغطي عدة حقول في بنية واحدة، وهو مناسب للاستعلامات التي تُصفّي البيانات أو تُرتّبها بناءً على هذه الحقول معًا. يدعم الفهرس المركب ما يصل إلى 32 حقلاً.

حقل _id هو MongoDBالمفتاح الأساسي، لذا تحصل كل مجموعة على فهرس _id فريد تلقائيًا. لا يمكن حذفه. لهذا السبب يبدأ numIndexesBefore من 1 حتى قبل إضافة أي فهرس مخصص.

قم بتشغيل الاستعلام باستخدام .explain(“executionStats”). في الخطة الفائزة، تعني مرحلة IXSCAN أنه تم استخدام فهرس، بينما تعني مرحلة COLLSCAN MongoDB تم فحص كل وثيقة، وقد يساعد إنشاء فهرس جديد.

استخدم مرحلة تجميع البيانات $indexStats لمعرفة عدد مرات الوصول إلى كل فهرس. الفهارس ذات الاستخدام المنخفض جدًا تُهدر مساحة القرص وتُبطئ عمليات الكتابة، لذا احذفها باستخدام dropIndex للحفاظ على حجم المجموعة صغيرًا.

تقوم أدوات الذكاء الاصطناعي بتحليل سجلات الاستعلامات البطيئة واقتراح الحقول التي يجب فهرستها. MongoDBيقوم مستشار الأداء بتصنيف توصيات المؤشرات حسب تأثيرها، مما يساعدping تقوم بإضافة الفهارس ذات القيمة العالية وتخطي الفهارس الزائدة.

نعم. يقوم مساعدو الذكاء الاصطناعي بتحويل طلبات اللغة الإنجليزية البسيطة إلى صيغة إنشاء فهرس صحيحة، بما في ذلك المفاتيح التصاعدية أو التنازلية وترتيب الحقول المركبة، ثم يشرحون الفهرس الناتج.

يرمز ESR إلى المساواة، والفرز، والنطاق. عند إنشاء فهرس مركب، ضع حقول مطابقة المساواة أولاً، ثم حقول الفرز، ثم عوامل تصفية النطاق. يتيح هذا الترتيب MongoDB استخدم الفهرس بأقصى كفاءة.

يتم الرد على الاستعلام المغطى بالكامل من خلال فهرس، دون قراءة المستندات. عندما يكون كل حقل في عامل التصفية والإسقاط موجودًا في فهرس واحد، MongoDB يُعيد النتائج بشكل أسرع.

تلخيص هذه التدوينة بـ: