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

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


عندما تقوم بالاستعلام عن عمود مفهرس، يبدأ محرك الاستعلام من أعلى العقدة الجذرية ويتجه نحو الأسفل عبر العقد الوسيطة، حيث تحتوي كل طبقة وسيطة على معلومات أكثر تفصيلاً حول البيانات. يستمر محرك الاستعلام في التحرك عبر عقد الفهرس حتى يصل إلى المستوى السفلي بأوراق الفهرس. على سبيل المثال، إذا كنت تبحث عن القيمة 123 في عمود مفهرس، فسيقوم محرك الاستعلام أولاً بتحديد الصفحة عند المستوى المتوسط ​​الأول في مستوى الجذر. في هذه الحالة تشير الصفحة الأولى إلى قيمة من 1 إلى 100، والثانية من 101 إلى 200، وبالتالي سيتمكن محرك الاستعلام من الوصول إلى الصفحة الثانية من هذا المستوى المتوسط. بعد ذلك سترى أنه يجب عليك الانتقال إلى الصفحة الثالثة من المستوى المتوسط ​​التالي. من هنا، سيقوم النظام الفرعي للاستعلام بقراءة قيمة الفهرس نفسه عند مستوى أدنى. يمكن أن تحتوي أوراق الفهرس إما على بيانات الجدول نفسها أو ببساطة مؤشر إلى صفوف تحتوي على بيانات في الجدول، اعتمادًا على نوع الفهرس: فهرس متفاوت المسافات أو فهرس غير متفاوت المسافات.

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

أنواع الفهارس

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

تصميم الفهارس

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

والآن في الواقع:

14 سؤالًا حول الفهارس في SQL Server والتي شعرت بالحرج من طرحها

لماذا لا يمكن أن يحتوي الجدول على فهرسين مجمعين؟

تريد إجابة قصيرة؟ الفهرس المجمع هو جدول. عندما تقوم بإنشاء فهرس متفاوت المسافات على جدول، يقوم محرك التخزين بفرز كافة الصفوف في الجدول بترتيب تصاعدي أو تنازلي، وفقًا لتعريف الفهرس. الفهرس المجمع ليس كيانًا منفصلاً مثل الفهارس الأخرى، ولكنه آلية لفرز البيانات في جدول وتسهيل الوصول السريع إلى صفوف البيانات.
لنتخيل أن لديك جدولًا يحتوي على سجل معاملات المبيعات. يتضمن جدول المبيعات معلومات مثل معرف الطلب وموضع المنتج في الطلب ورقم المنتج وكمية المنتج ورقم الطلب وتاريخه وما إلى ذلك. يمكنك إنشاء فهرس متفاوت المسافات على الأعمدة رقم التعريف الخاص بالطلبو معرف الخط، مرتبة تصاعديا كما هو موضح في الصورة التالية تي إس كيو إلشفرة:
إنشاء فهرس مجمع فريد ix_oriderid_lineid ON dbo.Sales(OrderID, LineID);
عند تشغيل هذا البرنامج النصي، سيتم فرز جميع الصفوف الموجودة في الجدول فعليًا أولاً بواسطة عمود OrderID ثم بواسطة LineID، ولكن البيانات نفسها ستبقى في كتلة منطقية واحدة، وهي الجدول. لهذا السبب، لا يمكنك إنشاء فهرسين متفاوت المسافات. يمكن أن يكون هناك جدول واحد فقط يحتوي على بيانات واحدة ولا يمكن فرز هذا الجدول إلا مرة واحدة بترتيب محدد.

إذا كان الجدول المجمع يوفر العديد من الفوائد، فلماذا استخدام الكومة؟

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

كيف أقوم بتغيير عامل تعبئة الفهرس الافتراضي؟

يعد تغيير عامل تعبئة الفهرس الافتراضي أمرًا واحدًا. إن فهم كيفية عمل النسبة الافتراضية أمر آخر. لكن أولاً، خذ بضع خطوات إلى الوراء. يحدد عامل تعبئة الفهرس مقدار المساحة على الصفحة لتخزين الفهرس في المستوى السفلي (مستوى الورقة) قبل البدء في ملء صفحة جديدة. على سبيل المثال، إذا تم تعيين المعامل على 90، فعندما ينمو الفهرس، سيشغل 90٪ من الصفحة ثم ينتقل إلى الصفحة التالية.
بشكل افتراضي، تكون قيمة عامل تعبئة الفهرس موجودة خادم قاعدة البياناتهو 0، وهو نفس 100. ونتيجة لذلك، ترث كافة الفهارس الجديدة هذا الإعداد تلقائيًا ما لم تحدد على وجه التحديد قيمة في التعليمات البرمجية الخاصة بك تختلف عن القيمة القياسية للنظام أو تغير السلوك الافتراضي. يمكنك استخدام ستوديو إدارة خادم SQLلضبط القيمة الافتراضية أو تشغيل إجراء مخزن في النظام sp_configure. على سبيل المثال، المجموعة التالية تي إس كيو إليقوم الأمر بتعيين قيمة المعامل على 90 (يجب عليك أولاً التبديل إلى وضع الإعدادات المتقدمة):
EXEC sp_configure "إظهار الخيارات المتقدمة"، 1؛ اذهب لإعادة التهيئة؛ GO EXEC sp_configure "عامل التعبئة"، 90؛ اذهب لإعادة التهيئة؛ يذهب
بعد تغيير قيمة عامل تعبئة الفهرس، تحتاج إلى إعادة تشغيل الخدمة خادم قاعدة البيانات. يمكنك الآن التحقق من القيمة المحددة عن طريق تشغيل sp_configure بدون الوسيطة الثانية المحددة:
EXEC sp_configure "عامل التعبئة" GO
يجب أن يُرجع هذا الأمر قيمة 90. ونتيجة لذلك، ستستخدم كافة الفهارس التي تم إنشاؤها حديثًا هذه القيمة. يمكنك اختبار ذلك عن طريق إنشاء فهرس والاستعلام عن قيمة عامل التعبئة:
استخدم AdventureWorks2012؛ - قاعدة البيانات الخاصة بك اذهب إلى إنشاء فهرس غير مجمع ix_people_lastname ON Person.Person(LastName); انتقل إلى تحديد عامل التعبئة من sys.indexes حيث object_id = object_id("Person.Person") AND name="ix_people_lastname";
في هذا المثال، قمنا بإنشاء فهرس غير مجمع على جدول شخصفي قاعدة البيانات أعمال المغامرة2012. بعد إنشاء الفهرس، يمكننا الحصول على قيمة عامل التعبئة من جداول النظام sys.indexes. يجب أن يعود الاستعلام 90.
ومع ذلك، لنتخيل أننا حذفنا الفهرس وقمنا بإنشائه مرة أخرى، لكننا الآن حددنا قيمة عامل تعبئة محددة:
إنشاء فهرس غير مجمع ix_people_lastname على Person.Person(LastName) with (fillfactor=80); انتقل إلى تحديد عامل التعبئة من sys.indexes حيث object_id = object_id("Person.Person") AND name="ix_people_lastname";
هذه المرة أضفنا التعليمات معوالخيار عامل التعبئةلعملية إنشاء الفهرس لدينا إنشاء فهرسوحددت القيمة 80. المشغل يختارتقوم الآن بإرجاع القيمة المقابلة.
حتى الآن، كان كل شيء واضحًا جدًا. حيث يمكن أن تحترق حقًا في هذه العملية برمتها عندما تقوم بإنشاء فهرس يستخدم قيمة معامل افتراضية، على افتراض أنك تعرف هذه القيمة. على سبيل المثال، يقوم شخص ما بالتعديل على إعدادات الخادم وهو عنيد جدًا لدرجة أنه قام بتعيين عامل تعبئة الفهرس على 20. وفي الوقت نفسه، تستمر في إنشاء الفهارس، على افتراض أن القيمة الافتراضية هي 0. لسوء الحظ، ليس لديك طريقة لمعرفة التعبئة عامل حتى لا تقوم بإنشاء فهرس ثم تحقق من القيمة كما فعلنا في الأمثلة لدينا. خلاف ذلك، سيتعين عليك الانتظار حتى ينخفض ​​\u200b\u200bأداء الاستعلام كثيرًا بحيث تبدأ في الشك في شيء ما.
هناك مشكلة أخرى يجب أن تكون على دراية بها وهي إعادة بناء الفهارس. كما هو الحال مع إنشاء فهرس، يمكنك تحديد قيمة عامل تعبئة الفهرس عند إعادة بنائه. ومع ذلك، على عكس أمر إنشاء الفهرس، فإن إعادة الإنشاء لا تستخدم إعدادات الخادم الافتراضية، على الرغم مما قد يبدو عليه الأمر. والأكثر من ذلك، إذا لم تحدد على وجه التحديد قيمة عامل تعبئة الفهرس، إذن خادم قاعدة البياناتسيتم استخدام قيمة المعامل الذي كان يوجد به هذا المؤشر قبل إعادة هيكلته. على سبيل المثال، العملية التالية تغيير الفهرسيعيد بناء الفهرس الذي أنشأناه للتو:
تغيير الفهرس ix_people_lastname ON Person.Person REBUILD؛ انتقل إلى تحديد عامل التعبئة من sys.indexes حيث object_id = object_id("Person.Person") AND name="ix_people_lastname";
عندما نتحقق من قيمة عامل التعبئة، سنحصل على قيمة 80، لأن هذا هو ما حددناه عندما أنشأنا الفهرس آخر مرة. يتم تجاهل القيمة الافتراضية.
كما ترون، فإن تغيير قيمة عامل تعبئة الفهرس ليس بالأمر الصعب. من الأصعب بكثير معرفة القيمة الحالية وفهم متى يتم تطبيقها. إذا قمت دائمًا بتحديد المعامل على وجه التحديد عند إنشاء الفهارس وإعادة بنائها، فستعرف دائمًا النتيجة المحددة. إلا إذا كان عليك القلق بشأن التأكد من عدم قيام شخص آخر بإفساد إعدادات الخادم مرة أخرى، مما يتسبب في إعادة بناء جميع الفهارس باستخدام عامل تعبئة فهرس منخفض بشكل يبعث على السخرية.

هل من الممكن إنشاء فهرس متفاوت المسافات في عمود يحتوي على نسخ مكررة؟

نعم و لا. نعم، يمكنك إنشاء فهرس متفاوت المسافات على عمود رئيسي يحتوي على قيم مكررة. لا، لا يمكن أن تظل قيمة عمود المفتاح في حالة غير فريدة. دعني أشرح. إذا قمت بإنشاء فهرس متفاوت المسافات غير فريد على عمود، فإن محرك التخزين يضيف مُوحدًا إلى القيمة المكررة لضمان التفرد وبالتالي يكون قادرًا على تحديد كل صف في الجدول المتفاوت المسافات.
على سبيل المثال، قد تقرر إنشاء فهرس متفاوت المسافات في عمود يحتوي على بيانات العميل اسم العائلةالحفاظ على اللقب. يحتوي العمود على قيم فرانكلين وهانكوك وواشنطن وسميث. ثم تقوم بإدراج القيم آدامز وهانكوك وسميث وسميث مرة أخرى. لكن قيمة العمود الرئيسي يجب أن تكون فريدة، لذلك سيغير محرك التخزين قيمة التكرارات بحيث تبدو كما يلي: Adams وFranklin وHancock وHancock1234 وWashington وSmith وSmith4567 وSmith5678.
للوهلة الأولى، يبدو هذا النهج جيدًا، لكن القيمة الصحيحة تزيد من حجم المفتاح، الأمر الذي يمكن أن يصبح مشكلة إذا كان هناك عدد كبير من التكرارات، وستصبح هذه القيم أساسًا لفهرس غير عنقودي أو أجنبي مرجع رئيسي. لهذه الأسباب، يجب عليك دائمًا محاولة إنشاء فهارس مجمعة فريدة كلما أمكن ذلك. إذا لم يكن ذلك ممكنا، فحاول على الأقل استخدام أعمدة ذات محتوى ذو قيمة فريدة عالية جدًا.

كيف يتم تخزين الجدول إذا لم يتم إنشاء فهرس متفاوت المسافات؟

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

ما هي العلاقة بين قيود تفرد القيمة والمفتاح الأساسي مع فهارس الجدول؟

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

لماذا تسمى الفهارس المجمعة وغير المجمعة B-tree في SQL Server؟

يتم توزيع الفهارس الأساسية في SQL Server، مجمعة أو غير مجمعة، عبر مجموعات من الصفحات تسمى عقد الفهرس. يتم تنظيم هذه الصفحات في تسلسل هرمي محدد ببنية شجرية تسمى الشجرة المتوازنة. في المستوى العلوي توجد العقدة الجذرية، وفي الأسفل توجد العقد الورقية، مع عقد وسطية بين المستويين العلوي والسفلي، كما هو موضح في الشكل:


توفر العقدة الجذرية نقطة الدخول الرئيسية للاستعلامات التي تحاول استرداد البيانات من خلال الفهرس. بدءًا من هذه العقدة، يبدأ محرك الاستعلام التنقل أسفل البنية الهرمية إلى العقدة الطرفية المناسبة التي تحتوي على البيانات.
على سبيل المثال، تخيل أنه تم استلام طلب لتحديد صفوف تحتوي على قيمة مفتاح 82. يبدأ النظام الفرعي للاستعلام في العمل من العقدة الجذرية، التي تشير إلى عقدة وسيطة مناسبة، في حالتنا 1-100. من العقدة المتوسطة 1-100 هناك انتقال إلى العقدة 51-100، ومن هناك إلى العقدة النهائية 76-100. إذا كان هذا فهرسًا متفاوت المسافات، فإن صفحة العقدة تحتوي على بيانات الصف المرتبط بالمفتاح يساوي 82. إذا كان هذا فهرسًا غير متفاوت المسافات، فإن صفحة الفهرس تحتوي على مؤشر إلى الجدول متفاوت المسافات أو صف محدد في الكومة.

كيف يمكن للفهرس تحسين أداء الاستعلام إذا كان عليك اجتياز كل عقد الفهرس هذه؟

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

إذا كانت الفهارس رائعة جدًا، فلماذا لا يتم إنشاء واحد فقط في كل عمود؟

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

هل من الضروري إنشاء فهرس متفاوت المسافات على عمود بمفتاح أساسي؟

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

ماذا لو قمت بفهرسة طريقة عرض، هل لا تزال طريقة عرض؟

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

لماذا نستخدم فهرس التغطية بدلا من الفهرس المركب؟

أولاً، دعونا نتأكد من أننا نفهم الفرق بين الاثنين. الفهرس المركب هو ببساطة فهرس عادي يحتوي على أكثر من عمود. يمكن استخدام أعمدة مفاتيح متعددة للتأكد من أن كل صف في الجدول فريد، أو قد يكون لديك عدة أعمدة للتأكد من أن المفتاح الأساسي فريد، أو ربما تحاول تحسين تنفيذ الاستعلامات التي يتم استدعاؤها بشكل متكرر على أعمدة متعددة. بشكل عام، كلما زاد عدد الأعمدة الرئيسية التي يحتوي عليها الفهرس، قلت كفاءة الفهرس، مما يعني أنه يجب استخدام الفهارس المركبة بحكمة.
كما هو مذكور، يمكن للاستعلام الاستفادة بشكل كبير إذا تم وضع جميع البيانات المطلوبة على الفور على صفحات الفهرس، تمامًا مثل الفهرس نفسه. هذه ليست مشكلة بالنسبة لفهرس متفاوت المسافات لأنه جميع البيانات موجودة بالفعل (وهذا هو سبب أهمية التفكير بعناية عند إنشاء فهرس مجمع). لكن الفهرس غير المجمع على الأوراق يحتوي فقط على أعمدة رئيسية. للوصول إلى كافة البيانات الأخرى، يتطلب مُحسِّن الاستعلام خطوات إضافية، والتي يمكن أن تضيف حملًا كبيرًا لتنفيذ الاستعلامات الخاصة بك.
هذا هو المكان الذي يأتي فيه مؤشر التغطية للإنقاذ. عندما تقوم بتعريف فهرس غير متفاوت المسافات، يمكنك تحديد أعمدة إضافية إلى الأعمدة الرئيسية الخاصة بك. على سبيل المثال، لنفترض أن تطبيقك يستعلم بشكل متكرر عن بيانات العمود رقم التعريف الخاص بالطلبو تاريخ الطلبفي الطاولة مبيعات:
حدد معرف الطلب وتاريخ الطلب من المبيعات حيث معرف الطلب = 12345؛
يمكنك إنشاء فهرس مركب غير مجمع على كلا العمودين، ولكن عمود OrderDate سيضيف فقط تكاليف صيانة الفهرس دون العمل كعمود مفتاح مفيد بشكل خاص. الحل الأفضل هو إنشاء فهرس تغطية في عمود المفتاح رقم التعريف الخاص بالطلببالإضافة إلى العمود المتضمن تاريخ الطلب:
إنشاء فهرس غير مجمع ix_orderid على dbo.Sales(OrderID) INCLUDE (OrderDate);
يؤدي هذا إلى تجنب عيوب فهرسة الأعمدة الزائدة مع الحفاظ على فوائد تخزين البيانات في الأوراق عند تشغيل الاستعلامات. العمود المضمن ليس جزءًا من المفتاح، ولكن يتم تخزين البيانات على العقدة الطرفية، ورقة الفهرس. يمكن أن يؤدي ذلك إلى تحسين أداء الاستعلام دون أي حمل إضافي. بالإضافة إلى ذلك، تخضع الأعمدة المضمنة في فهرس التغطية لقيود أقل من الأعمدة الرئيسية في الفهرس.

هل عدد التكرارات في عمود المفتاح مهم؟

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

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

بشكل افتراضي، يحتوي الفهرس غير المجمع على صف واحد لكل صف في الجدول. بالطبع، يمكنك قول الشيء نفسه عن الفهرس المجمع، على افتراض أن هذا الفهرس عبارة عن جدول. ولكن عندما يتعلق الأمر بفهرس غير مجمع، فإن علاقة رأس برأس هي مفهوم مهم لأنه، بدءًا من الإصدار سكل سيرفر 2008، لديك خيار إنشاء فهرس قابل للتصفية يحدد الصفوف المضمنة فيه. يمكن للفهرس الذي تمت تصفيته تحسين أداء الاستعلام لأن... إنه أصغر حجمًا ويحتوي على إحصائيات مفلترة وأكثر دقة من جميع الإحصائيات الجدولية - وهذا يؤدي إلى إنشاء خطط تنفيذ محسنة. يتطلب الفهرس الذي تمت تصفيته أيضًا مساحة تخزين أقل وتكاليف صيانة أقل. يتم تحديث الفهرس فقط عندما تتغير البيانات المطابقة لعامل التصفية.
بالإضافة إلى ذلك، من السهل إنشاء فهرس قابل للتصفية. في المشغل إنشاء فهرستحتاج فقط إلى الإشارة في أينحالة التصفية. على سبيل المثال، يمكنك تصفية جميع الصفوف التي تحتوي على NULL من الفهرس، كما هو موضح في الكود:
إنشاء فهرس غير مجمع ix_trackingnumber على Sales.SalesOrderDetail(CarrierTrackingNumber) حيث لا يكون CarrierTrackingNumber فارغًا؛
يمكننا، في الواقع، تصفية أي بيانات غير مهمة في الاستعلامات الهامة. لكن كن حذرا، لأن... خادم قاعدة البياناتيفرض عدة قيود على الفهارس القابلة للتصفية، مثل عدم القدرة على إنشاء فهرس قابل للتصفية في طريقة عرض، لذا اقرأ الوثائق بعناية.
قد يكون من الممكن أيضًا تحقيق نتائج مماثلة عن طريق إنشاء طريقة عرض مفهرسة. ومع ذلك، فإن الفهرس الذي تمت تصفيته له العديد من المزايا، مثل القدرة على تقليل تكاليف الصيانة وتحسين جودة خطط التنفيذ الخاصة بك. يمكن أيضًا إعادة بناء الفهارس التي تمت تصفيتها عبر الإنترنت. جرب هذا مع طريقة عرض مفهرسة.

ومرة أخرى قليلا من المترجم

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

كما وعدناكم الكتب لمن يريد معرفة المزيد
أوصي بثلاثة كتب جيدة جدًا من نفسي (الروابط تؤدي إلى أضرمالإصدارات في المتجر أمازون):

من حيث المبدأ، يمكنك فتح فهارس بسيطة وإضافة العلامات
أساسيات Microsoft SQL Server 2012 T-SQL (مرجع المطور)
المؤلف ايتسيك بن غان
تاريخ النشر: 15 يوليو 2012
يقدم المؤلف، وهو أستاذ في مهنته، المعرفة الأساسية حول العمل مع قواعد البيانات.
إذا نسيت كل شيء أو لم تعرفه أبدًا، فهو بالتأكيد يستحق القراءة.

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

كل من الفهارس البسيطة والمعقدة لها نوع خاص بها (Ture). الفهرس الأساسي (الأساسي) (المفتاح) هو حقل أو مجموعة من الحقول التي تحدد السجل بشكل فريد، أي أن قيم الفهرس الأساسي فريدة (غير متكررة). في قاعدة البيانات العلائقية، يمكن أن يحتوي كل جدول على مفتاح أساسي واحد فقط. يمكن أن يحتوي الجدول على العديد من المفاتيح الخارجية وسيكون لها أحد الأنواع التالية:

المرشح - مرشح للمفتاح الأساسي أو المفتاح البديل. أنه يحتوي على كافة خصائص المفتاح الأساسي.

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

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

تتم العلاقة بين الجداول من خلال الفهارس، والتي تسمى المفاتيح.

يتم تخزين الفهرس الذي تم إنشاؤه في ملف فهرس خاص. إذا كان ملف الفهرس يخزن فهرسًا واحدًا فقط، فإنه يُسمى فهرسًا فرديًا وله الامتداد .idx. تُسمى ملفات الفهرس التي تخزن العديد من الفهارس بملفات متعددة الفهارس ولها امتداد ‎.cdx. يسمى كل فهرس يتم تخزينه في ملف متعدد الفهارس علامة. كل علامة لها اسم فريد خاص بها.

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

يفتح تلقائيا مع الجدول الخاص به؛

لا يمكن إغلاقه، لكن لا يمكن جعله هو الشيء الرئيسي.

يمكن أن يحتوي جدول واحد على العديد من ملفات الفهرس، سواء ذات الفهرس الفردي أو الفهارس المتعددة. تستخدم الإصدارات الأقدم من FoxPro ملفات Multi-Index.

إنشاء فهرس

هناك طريقتان لإنشاء فهرس.

أ.باستخدام الأمر:

مؤشر على<индексное выражение>الذي - التي< بطاقة تعريفملف x> | بطاقة شعار<имя тега>

الغرض من الخيارات:

<تعبير الفهرس>- اسم الحقل (أو الحقول) بناءً على القيم التي يجب بناء الفهرس عليها. عند إنشاء فهرس معقد، يتم إدراج أسماء الحقول مفصولة بعلامة + (زائد). إذا تم إنشاء فهرس معقد بواسطة:

بالنسبة للحقول الرقمية، يتم إنشاء الفهرس استنادًا إلى مجموع قيم الحقول؛

بالنسبة لحقول الحروف، يتم بناء الفهرس أولاً حسب قيمة الحقل الأول، وفي حالة تكرار قيم الحقل الأول - حسب قيم الحقل الثاني؛ إذا تكررت قيم الحقلين الأول والثاني - حسب قيم الحقل الثالث وما إلى ذلك؛

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

يجب ألا يتجاوز طول تعبير الفهرس 254 حرفًا.

الذي - التي< بطاقة تعريفملف x>- تتم الإشارة إلى اسم ملف الفهرس الفردي.

بطاقة شعار<имя тега> - يشير إلى اسم العلامة في ملف متعدد الفهارس. إذا تم استخدام الخيار، فسيتم وضع العلامة التي تم إنشاؤها في ملف متعدد الفهارس المحدد، وإذا كان ملف الفهرس المتعدد المطلوب مفقودًا، فسيتم إنشاء ملف هيكلي متعدد الفهارس. إذا تم حذف الخيار، فسيتم وضع العلامة التي تم إنشاؤها في ملف الفهرس المتعدد الحالي.

ل<условие> - يضبط وضع التحديد لفهرس سجلات الجدول التي ترضي<условию>.

المدمج- يتحكم في إنشاء ملف مضغوط أحادي الفهرس. الإصدارات الأقدم من FoxPro لا تستخدمه.

تنازلي- يبني الفهرس بترتيب تنازلي. بشكل افتراضي، يتم إنشاء الفهرس بترتيب تصاعدي (تصاعدي). بالنسبة للملفات ذات الفهرس الفردي، يمكنك إنشاء فهرس بترتيب تصاعدي فقط. إذا قمت بإصدار الأمر SET COLLATE قبل استخدام الأمر INDEX ON...، فيمكنك إنشاء ملف فهرس واحد بترتيب تنازلي.

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

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

ب.استخدام القائمة الرئيسية:

في هذه الحالة، يتم إنشاء الفهرس إما عند إنشاء الجدول أو عند تعديل بنية الجدول. للقيام بذلك، في لوحة الحوار مصمم الجدول، حدد علامة التبويب فهرس (الشكل 3.1).

يتم وصف كل فهرس بسطر واحد في مربع الحوار "مصمم الجدول".

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

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

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

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

في التين. يوضح الشكل 3.2 إنشاء فهرس معقد باستخدام حقلين من الأحرف ush_step وuch_zvan (تم تعيين اسم العلامة uch قبل استدعاء منشئ التعبير على الشاشة). علامة "+" التي تشير إلى إنشاء فهرس معقد مأخوذة من القائمة المنسدلة للسلسلة.

تسرد القائمة المنسدلة String وظائف السلسلة الصالحة. وبالمثل، تسرد القوائم المنسدلة Math وLogical وDate وظائف رياضية ومنطقية وتاريخية صالحة. يتم تحديد الوظيفة المطلوبة من هذه القوائم المنسدلة بالنقر فوق زر الماوس الأيسر. يتم تحديد أسماء الحقول (قائمة الحقول) وأسماء المتغيرات (قائمة المتغيرات) بالنقر المزدوج فوق زر الماوس الأيسر. يتم وضع التعبير الناتج في نافذة التعبير.

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

1) مفهوم الفهرس
فِهرِسهي أداة توفر وصولاً سريعًا إلى صفوف الجدول بناءً على قيم عمود واحد أو أكثر.

هناك الكثير من التنوع في هذا المشغل لأنه غير موحد، حيث أن المعايير لا تعالج مشكلات الأداء.

2) إنشاء الفهارس
إنشاء فهرس
على()

3) تغيير وحذف الفهارس
للتحكم في نشاط الفهرس يتم استخدام العامل:
تغيير الفهرس
لإزالة فهرس، استخدم عامل التشغيل:
إسقاط المؤشر

أ) قواعد اختيار الجدول
1. يُنصح بفهرسة الجداول التي لا يتم تحديد أكثر من 5% من الصفوف فيها.
2. يجب فهرسة الجداول التي لا تحتوي على تكرارات في جملة WHERE في عبارة SELECT.
3. ليس من العملي فهرسة الجداول التي يتم تحديثها بشكل متكرر.
4. من غير المناسب فهرسة الجداول التي لا تشغل أكثر من صفحتين (في Oracle هذا أقل من 300 صف)، نظرًا لأن فحصها الكامل لا يستغرق وقتًا أطول.

ب) قواعد اختيار العمود
1. المفاتيح الأساسية والأجنبية - تُستخدم غالبًا لربط الجداول واسترداد البيانات والبحث. هذه دائمًا فهارس فريدة ذات فائدة قصوى
2. عند استخدام خيارات التكامل المرجعي، تحتاج دائمًا إلى فهرس على FK.
3. الأعمدة التي يتم من خلالها فرز و/أو تجميع البيانات غالبًا.
4. الأعمدة التي يتم البحث عنها بشكل متكرر في جملة WHERE في عبارة SELECT.
5. لا ينبغي عليك إنشاء فهارس على أعمدة وصفية طويلة.

ج) مبادئ إنشاء الفهارس المركبة
1. تكون الفهارس المركبة جيدة إذا كانت الأعمدة الفردية تحتوي على عدد قليل من القيم الفريدة، ولكن الفهرس المركب يوفر المزيد من التفرد.
2. إذا كانت جميع القيم المحددة بواسطة عبارة SELECT تنتمي إلى فهرس مركب، فسيتم تحديد القيم من الفهرس.
3. يجب إنشاء فهرس مركب إذا كانت جملة WHERE تستخدم قيمتين أو أكثر مدمجة مع عامل التشغيل AND.

د) لا ينصح بإنشائه
لا يوصى بإنشاء فهارس على الأعمدة، بما في ذلك الأعمدة المركبة، التي:
1. نادرًا ما يستخدم للبحث عن نتائج الاستعلام ودمجها وفرزها.
2. تحتوي على قيم متغيرة بشكل متكرر، الأمر الذي يتطلب تحديثًا متكررًا للفهرس، مما يؤدي إلى إبطاء أداء قاعدة البيانات.
3. تحتوي على عدد قليل من القيم الفريدة (أقل من 10% م/ف) أو عدد سائد من الخطوط بقيمة واحدة أو قيمتين (مدينة إقامة المورد هي موسكو).
4. يتم تطبيق الوظائف أو التعبير عليها في جملة WHERE، ولا يعمل الفهرس.

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

لتوفير وصول سريع إلى صفوف جدول Oracle DBMS، يتم استخدام الفهارس. توفر الفهارس وصولاً سريعًا إلى البيانات أثناء العمليات التي تحدد عددًا صغيرًا نسبيًا من صفوف الجدول.

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


إنشاء فهارس بعد إدراج بيانات الجدول

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

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

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

  1. قم بإنشاء مساحة جدول مؤقتة جديدة باستخدام عبارة CREATE TABLESPACE.
  2. حدد هذه المساحة المؤقتة الجديدة في المعلمة TEMPORARY TABLESPACE لعبارة ALTER USER.
  3. قم بإنشاء فهرس باستخدام عبارة CREATE INDEX.
  4. قم بإسقاط مساحة الجدول هذه باستخدام أمر DROP TABLESPACE. ثم استخدم عبارة ALTER USER لاستعادة مساحة الجدول الأصلية كمؤقتة.

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

استخدم الإرشادات التالية لتحديد متى يتم إنشاء فهرس.

  1. قم بإنشاء فهرس إذا كنت تقوم بشكل متكرر باسترداد عدد صغير نسبيًا (أقل من 15%) من الصفوف من جدول كبير. تعتمد هذه النسبة بشكل كبير على السرعة النسبية لفحص الجدول ومدى تجميع بيانات الصف في مفتاح الفهرس. كلما زادت سرعة التصفح، انخفضت النسبة، وكلما كانت بيانات الصف أكثر تجميعًا، زادت النسبة.
  2. أعمدة الفهرس المستخدمة في الصلات لتحسين أداء الانضمام إلى جداول متعددة.
  3. يتم إنشاء الفهارس تلقائيًا بناءً على المفاتيح الأساسية والفريدة.
  4. الجداول الصغيرة لا تحتاج إلى فهرستها. إذا لاحظت أن وقت تنفيذ الاستعلام قد زاد بشكل كبير، فمن المرجح أنه أصبح كبيرا.
بعض الأعمدة مرشحة بشكل واضح للفهرسة. لديهم الخصائص التالية:
  • القيم الموجودة في العمود فريدة نسبيًا؛
  • مجموعة كبيرة من القيم (مناسبة للفهارس العادية)؛
  • نطاق صغير من القيم (مناسب لفهارس البتات)؛
  • أعمدة متفرقة للغاية (الكثير من القيم "الفارغة" غير المحددة)، ولكن الاستعلامات تتعلق في الغالب بصفوف ذات معنى. في هذه الحالة يفضل المقارنة التي تطابق جميع القيم غير الخالية:
    حيث COL_X > -9.99 *الطاقة (10، 125) بدلاً من
    حيث أن COL_X ليس فارغًا وذلك لأن الحالة الأولى تستخدم فهرس COL_X (بافتراض أن العمود COL_X هو نوع رقمي).

تحديد عدد الفهارس لكل جدول

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

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

اختر ترتيب الأعمدة في الفهارس المركبة

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

جمع الإحصائيات للاستخدام السليم للفهارس

يمكن استخدام الفهارس بشكل أكثر فعالية إذا كانت قاعدة البيانات تجمع وتحافظ على إحصائيات حول الجداول المستخدمة في الاستعلامات. يمكنك جمع الإحصائيات أثناء إنشاء الفهرس عن طريق تحديد الكلمة الأساسية COMPUTE STATISTICS في عبارة CREATE INDEX. نظرًا لأن البيانات يتم تحديثها باستمرار ويتغير توزيع القيم، فيجب تحديث الإحصائيات بشكل دوري باستخدام إجراءات DBMS_STATS.GATHER_TABLE_STATISTICS وDBMS_STATS.GATHER_SCHEMA_STATISTICS.

تدمير الفهارس غير الضرورية

يتم حذف الفهرس في الحالات التالية:

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

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

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

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

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

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

أمر إنشاء الفهرس

بناء الجملة الأساسي إنشاء فهرسعلى النحو التالي:

إنشاء فهرس_اسم_على_اسم_الجدول؛

فهارس عمود واحد

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

إنشاء فهرس_اسم على table_name(column_name);

مؤشرات فريدة من نوعها

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

إنشاء فهرس فريد من نوعه اسم_الفهرس على table_name(column_name);

المؤشرات المركبة

الفهرس المركب هو فهرس موجود في عمودين أو أكثر من الجدول. بناء الجملة الأساسي هو كما يلي.

إنشاء INDEX_name على table_name(column1, column2);

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

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

الفهارس الضمنية

الفهارس الضمنية هي فهارس يتم إنشاؤها تلقائيًا على خادم قاعدة البيانات عند إنشاء كائن. يتم إنشاء الفهارس تلقائيًا على المفتاح الأساسي والقيد الفريد.

أمر إسقاط الفهرس

يمكن حذف الفهرس باستخدام أمر SQL يسقط. يجب أن تكون حذرًا عند حذف فهرس لأن الأداء قد يكون أبطأ أو أفضل.

بناء الجملة الأساسي هو كما يلي:

إسقاط مؤشر الفهرس_name؛

يمكنك إلقاء نظرة على مثال قيد INDEX لرؤية بعض الأمثلة الحقيقية على الفهارس.

متى يجب عليك تجنب الفهارس؟

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

تشير الإرشادات التالية إلى متى يجب إعادة النظر في استخدام الفهرس.

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


 


يقرأ:



الرمز الترويجي Asos لشهر أكتوبر. رموز ASOS الترويجية. لماذا اسوس ودكتور مارتينز

الرمز الترويجي Asos لشهر أكتوبر.  رموز ASOS الترويجية.  لماذا اسوس ودكتور مارتينز

نبذة عن المتجر بدأت شركة Asos البريطانية، إحدى الشركات الرائدة في مجال التداول العالمي عبر الإنترنت، تاريخها في عام 2000. وكانت الشركة توظف ثلاثة أشخاص، ...

ما هي لوحات الألعاب المناسبة لجهاز PS3

ما هي لوحات الألعاب المناسبة لجهاز PS3

DualShock 3 هي لوحة ألعاب مملوكة لوحدة تحكم Sony PlayStation 3. على الرغم من حقيقة أن وحدة التحكم قديمة بالفعل من الناحية الفنية، إلا أنها لا تزال...

الملامح الرئيسية لموزيلا فايرفوكس

الملامح الرئيسية لموزيلا فايرفوكس

× Close Firefox هو متصفح قوي وشائع وغني بالميزات يضمن الأمان والسرعة والكفاءة...

تحديث البرنامج الثابت لهواتف Samsung Galaxy الذكية البرنامج الثابت لجهاز Samsung s3

تحديث البرنامج الثابت لهواتف Samsung Galaxy الذكية البرنامج الثابت لجهاز Samsung s3

صور البرامج الثابتة: تعليمات تثبيت البرامج الثابتة: قواعد البرامج الثابتة: - اتبع التعليمات بعناية ووضوح، ويجب اتباع جميع الخطوات...

صورة تغذية آر إس إس