سؤال

ما هي الاختلافات بين أ clustered و أ non-clustered index?

هل كانت مفيدة؟

المحلول

الفهرس المجمع

  • واحد فقط لكل طاولة
  • أسرع في القراءة من غير المجمعة حيث يتم تخزين البيانات فعليًا بترتيب الفهرس

مؤشر غير متفاوت

  • يمكن استخدامها عدة مرات لكل طاولة
  • أسرع لعمليات الإدراج والتحديث من الفهرس المجمع

سيعمل كلا النوعين من الفهرس على تحسين الأداء عند تحديد البيانات التي تحتوي على حقول تستخدم الفهرس ولكنها ستبطئ عمليات التحديث والإدراج.

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

عادةً ما يستخدم SQL Server الفهرس فقط إذا كانت انتقائيته أعلى من 95%.

نصائح أخرى

تقوم الفهارس المجمعة بترتيب البيانات الموجودة على القرص فعليًا.وهذا يعني عدم الحاجة إلى بيانات إضافية للفهرس، ولكن يمكن أن يكون هناك فهرس مجمع واحد فقط (من الواضح).يعد الوصول إلى البيانات باستخدام فهرس متفاوت المسافات هو الأسرع.

يجب أن تكون كافة الفهارس الأخرى غير مجمعة.يحتوي الفهرس غير المجمع على نسخة مكررة من البيانات من الأعمدة المفهرسة التي يتم الاحتفاظ بها مرتبة مع مؤشرات إلى صفوف البيانات الفعلية (مؤشرات إلى الفهرس المجمع إذا كان هناك واحد).وهذا يعني أن الوصول إلى البيانات من خلال فهرس غير مجمع يجب أن يمر عبر طبقة إضافية من عدم الاتجاه.ومع ذلك، إذا قمت بتحديد البيانات المتوفرة في الأعمدة المفهرسة فقط، فيمكنك الحصول على البيانات مرة أخرى مباشرةً من بيانات الفهرس المكررة (ولهذا السبب من الجيد تحديد الأعمدة التي تحتاجها فقط وعدم استخدامها *)

يتم تخزين الفهارس المجمعة فعليًا على الطاولة.وهذا يعني أنها الأسرع ولا يمكنك الحصول إلا على فهرس مجمع واحد لكل جدول.

يتم تخزين الفهارس غير المجمعة بشكل منفصل، ويمكنك الحصول على العدد الذي تريده.

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

الفهرس المجمع

  1. يمكن أن يكون هناك فهرس مجمع واحد فقط للجدول.
  2. عادة ما يتم ذلك على المفتاح الأساسي.
  3. تحتوي العقد الطرفية للفهرس المجمع على صفحات البيانات.

مؤشر غير متفاوت

  1. يمكن أن يكون هناك 249 فهارسًا غير مجمعة فقط للجدول (حتى تدعم الإصدارات الأحدث من إصدار SQL 2005 ما يصل إلى 999 فهارسًا غير مجمعة).
  2. عادة ما يتم ذلك على أي مفتاح.
  3. لا تتكون العقدة الطرفية للفهرس غير العنقودي من صفحات البيانات.بدلاً من ذلك، تحتوي العقد الطرفية على صفوف الفهرس.

الفهرس المجمع

  • يمكن أن يوجد فهرس مجمع واحد فقط في الجدول
  • قم بفرز السجلات وتخزينها فعليًا وفقًا للترتيب
  • استرداد البيانات أسرع من الفهارس غير المجمعة
  • لا تحتاج إلى مساحة إضافية لتخزين البنية المنطقية

مؤشر غير متفاوت

  • يمكن أن يكون هناك أي عدد من الفهارس غير المجمعة في الجدول
  • لا تؤثر على النظام المادي.قم بإنشاء ترتيب منطقي لصفوف البيانات واستخدم المؤشرات لملفات البيانات الفعلية
  • إدراج/تحديث البيانات أسرع من الفهرس المجمع
  • استخدم مساحة إضافية لتخزين البنية المنطقية

بصرف النظر عن هذه الاختلافات، عليك أن تعرف أنه عندما يكون الجدول غير مجمع (عندما لا يحتوي الجدول على فهرس متفاوت المسافات)، تكون ملفات البيانات غير مرتبة ويستخدم بنية بيانات الكومة كبنية بيانات.

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

غير متجمع يعني أنه ترتيب منطقي "فقط".

الايجابيات:

تعمل الفهارس المجمعة بشكل رائع مع النطاقات (على سبيل المثال.حدد * من my_table حيث my_key بين @min و@max)

في بعض الحالات، لن يتعين على نظام إدارة قواعد البيانات (DBMS) القيام بالعمل للفرز إذا كنت تستخدم عبارة orderby.

سلبيات:

يمكن أن تؤدي الفهارس المجمعة إلى إبطاء عمليات الإدخال لأنه يجب تعديل التخطيطات الفعلية للسجلات عند وضع السجلات إذا لم تكن المفاتيح الجديدة بترتيب تسلسلي.

يصف الفهرس المجمع في الواقع الترتيب الذي يتم به تخزين السجلات فعليًا على القرص، ولهذا السبب يمكنك الحصول على فهرس واحد فقط.

يحدد الفهرس غير المجمع ترتيبًا منطقيًا لا يتطابق مع الترتيب الفعلي على القرص.

الفهرس المجمع هو في الأساس نسخة مرتبة من البيانات الموجودة في الأعمدة المفهرسة.

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

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

تتكون قاعدة البيانات المفهرسة من جزأين:مجموعة من السجلات المادية، التي تم ترتيبها بترتيب اعتباطي، ومجموعة من الفهارس التي تحدد التسلسل الذي يجب أن تُقرأ به السجلات للحصول على نتيجة مرتبة حسب بعض المعايير.إذا لم يكن هناك ارتباط بين الترتيب المادي والفهرس، فإن قراءة كافة السجلات بالترتيب قد تتطلب إجراء الكثير من عمليات القراءة المستقلة للسجل الواحد.نظرًا لأن قاعدة البيانات قد تكون قادرة على قراءة العشرات من السجلات المتتالية في وقت أقل مما قد يستغرقه الأمر لقراءة سجلين غير متتاليين، فقد يتم تحسين الأداء إذا تم أيضًا تخزين السجلات المتتالية في الفهرس بشكل متتالي على القرص.سيؤدي تحديد تجميع الفهرس إلى بذل قاعدة البيانات بعض الجهد (تختلف قواعد البيانات المختلفة من حيث المقدار) لترتيب الأشياء بحيث تكون مجموعات السجلات المتتالية في الفهرس متتالية على القرص.

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

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

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

متجمعة

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

غير عنقودي

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

ربما تكون قد مررت بالجزء النظري من المشاركات المذكورة أعلاه:

- الفهرس المجمع كما يمكننا رؤية النقاط مباشرة للتسجيل أي.إنه مباشر لذا يستغرق وقتًا أقل للبحث.بالإضافة إلى ذلك، لن يستغرق الأمر أي ذاكرة/مساحة إضافية لتخزين الفهرس

-بينما، في الفهرس غير المجمع، فإنه يشير بشكل غير مباشر إلى الفهرس المجمع، ثم سيصل إلى السجل الفعلي، نظرًا لطبيعته غير المباشرة، سيستغرق الوصول إليه بعض الوقت. كما أنه يحتاج إلى ذاكرة/مساحة خاصة به لتخزين فِهرِس

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top