ما هي الفهارس المغطاة والاستعلامات المغطاة في SQL Server؟

StackOverflow https://stackoverflow.com/questions/609343

  •  03-07-2019
  •  | 
  •  

سؤال

هل يمكنك شرح المفاهيم والعلاقة بين فهارس التغطية والاستعلامات المغطاة في Microsoft SQL Server؟

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

المحلول

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

وليس هناك شيء مثل الاستعلام غطاء.

وإلقاء نظرة على هذه المادة بسيطة تتحدث: <لأ href = "http://www.simple-talk.com/sql/learn-sql-server/using-covering-indexes-to-improve-query- أداء / "يختلط =" noreferrer "> استخدام تغطي مؤشرات لتحسين أداء طلب .

نصائح أخرى

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

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

يمكن أن تكون الروابط التالية مفيدة، إذا كنت جديدًا في فهرسة المفاهيم:

ومؤشر تغطية ومؤشر Non-Clustered. المؤشرين المجمعة وغير المجمعة-استخدام بنية بيانات B-شجرة لتحسين البحث عن البيانات، والفرق هو أن في أوراق مؤشر مجمع سجل كله (أي صف) يتم تخزينها جسديا هناك حق!، ولكن هذا ليس هو الحال بالنسبة لمؤشرات غير المجمعة. الأمثلة التالية توضح ذلك:

مثال: لدي جدول مع ثلاثة أعمدة: ID، Fname Lname و

ولكن، للحصول على فهرس غير متفاوت، هناك احتمالان: إما كان الجدول يحتوي بالفعل على فهرس متفاوت المسافات أو أنها لا:

وكما تظهر الرسوم البيانية اثنين، هذه المؤشرات غير المجمعة لا تقدم أداء جيدا، لأنهم لا يستطيعون العثور على قيمة المفضلة (أي Lname) فقط من B-شجرة. بدلا من ذلك لديهم للقيام بحث لأعلى خطوة إضافية (إما مفتاح أو النقل بالسكك الحديدية بالبحث) للعثور على قيمة Lname. و، <م> هذا هو المكان الذي يأتي مؤشر غطت على الشاشة. هنا، ومؤشر غير متفاوت على ID coveres قيمة Lname الحق بجانبه في أوراق B-شجرة وليس هناك حاجة لأي نوع من النظر بعد الآن.

أ الاستعلام المغطاة هو استعلام يتم فيه سحب كافة الأعمدة الموجودة في مجموعة نتائج الاستعلام من فهارس غير مجمعة.

يتم تحويل الاستعلام إلى استعلام مغطى من خلال الترتيب الحكيم للفهارس.

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

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

هنا مقال في devx.com يقول:

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

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

على سبيل المثال، قد لا تستفيد صلة جدول في حد ذاتها من مثل هذا الفهرس (اعتمادًا على ذكاء مخطط تنفيذ استعلام SQL):

PersonID ParentID Name
1        NULL     Abe
2        NULL     Bob
3        1        Carl
4        2        Dave

لنفترض أن هناك فهرسًا قيد التشغيل PersonID,ParentID,Name - سيكون هذا فهرسًا يغطي استعلامًا مثل:

SELECT PersonID, ParentID, Name FROM MyTable

لكن استعلام مثل هذا:

SELECT PersonID, Name FROM MyTable LEFT JOIN MyTable T ON T.PersonID=MyTable.ParentID

ربما لن يستفيد كثيرًا، على الرغم من أن جميع الأعمدة موجودة في الفهرس.لماذا؟لأنك لا تخبره حقًا أنك تريد استخدام الفهرس الثلاثي لـ PersonID,ParentID,Name.

بدلاً من ذلك، أنت تقوم ببناء شرط بناءً على عمودين - PersonID و ParentID (الذي يترك Name) ثم تطلب جميع السجلات مع الأعمدة PersonID, Name.في الواقع، اعتمادًا على التنفيذ، قد يساعد الفهرس الجزء الأخير.لكن بالنسبة للجزء الأول، من الأفضل أن يكون لديك فهارس أخرى.

واستعلام تغطية على حيث كل المسندات يمكن أن يقابل باستخدام الأرقام القياسية على الجداول الأساسية.

وهذه هي الخطوة الأولى نحو تحسين أداء مزود قيد النظر.

ومؤشر الغطاء هو الذي يعطي كل عمود المطلوبة وفي أي ملقم SQL لا تملك الهيب العودة إلى فهرس مجمع للعثور على أي عمود. ويتحقق ذلك باستخدام مؤشر غير عنقودية واستخدام الخيار لتغطية الأعمدة تحوى. الأعمدة غير الرئيسية يمكن إدراجها إلا في فهارس غير عنقودية. لا يمكن تحديد الأعمدة في كل عمود المفتاح وتحوى القائمة. أسماء الأعمدة لا يمكن أن يتكرر في تضمين القائمة. يمكن إسقاط الأعمدة غير الرئيسية من جدول فقط بعد تراجع مؤشر غير الرئيسي الأول. <وأ href = "http://blog.sqlauthority.com/2007/04/23/sql-server-understanding-new-index-type-of-sql-server-2005-included-column-index-along-with -clustered-مؤشر وغير متفاوت مؤشر / "يختلط =" نوفولو "> يرجى الاطلاع على التفاصيل هنا

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

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

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