sql - نايس - ما معني كلمه nice بالعربي




ما هو المؤشر المغطى؟ (3)

تغطي الفهارس الفهارس التي "تغطي" جميع الأعمدة المطلوبة من جدول معين ، مما يلغي الحاجة إلى الوصول إلى الجدول الفعلي على الإطلاق للاستعلام / العملية المعينة.

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

أعمدة لتغطية:

  • شروط معلمة أو ثابتة ؛ الأعمدة المقيدة بعلامة مرجعية أو ثابتة.
  • الانضمام الأعمدة. الأعمدة المستخدمة ديناميكيًا للانضمام
  • الأعمدة المحددة ؛ للرد على القيم المختارة.

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

تغطي الفهارس لاستعلامات انضم

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

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

فمثلا:

select oi.title, c.name, c.address
from porderitem poi
join porder po on po.id = poi.fk_order
join customer c on c.id = po.fk_customer
where po.orderdate > ? and po.status = 'SHIPPING';

create index porder_custitem on porder (orderdate, id, status, fk_customer);

نرى:

لقد سمعت للتو مصطلح يشمل المؤشر في بعض مناقشة قاعدة البيانات - ماذا يعني ذلك؟


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

مثال:

CREATE TABLE MyTable
(
  ID INT IDENTITY PRIMARY KEY, 
  Foo INT
) 

CREATE NONCLUSTERED INDEX index1 ON MyTable(ID, Foo)

SELECT ID, Foo FROM MyTable -- All requested data are covered by index

هذه هي واحدة من أسرع الطرق لاستعادة البيانات من خادم SQL.


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

على سبيل المثال ، هذا:

SELECT *
FROM tablename
WHERE criteria

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

ومع ذلك ، إذا احتوى الفهرس على الأعمدة column1 و column2 و column3 ، فإن هذا sql:

SELECT column1, column2
FROM tablename
WHERE criteria

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

يمكن استخدام هذا أيضًا إذا كنت ترى أن استعلامًا نموذجيًا يستخدم عمودًا أو عمودين لحل أي من الصفوف ، ثم يضيف عادةً عمودًا آخرًا من 1-2 ، فقد يكون من المفيد إلحاق هذه الأعمدة الإضافية (إذا كانت هي نفسها في كل مكان ) إلى الفهرس ، حتى يتمكن معالج الاستعلام من الحصول على كل شيء من الفهرس نفسه.

وإليك مقالاً: تعمل تغطية الفهرس على تحسين أداء استعلام SQL Server في هذا الموضوع.







indexing