7.12 SQL - Clustered, Non-Clustered Index

الفرق بين Clustered و Non-Clustered Index

في SQL، Index (الفهرس) يُستخدم لتحسين أداء الاستعلامات عبر تسريع عمليات البحث والفرز. يوجد نوعان رئيسيان من الفهارس:

  • Clustered Index (فهرس مُجمّع)
  • Non-Clustered Index (فهرس غير مُجمّع)

📌 ما هو Clustered Index؟

هو الفهرس الذي يُحدد ترتيب البيانات الفعلي في الجدول. يعني أن الصفوف في الجدول مرتبة فعليًا حسب هذا الفهرس.

  • يمكن أن يكون هناك فقط واحد لكل جدول.
  • عادة يتم إنشاؤه تلقائيًا عندما نحدد PRIMARY KEY.

CREATE TABLE Customers (
  CustomerID int PRIMARY KEY,
  Name varchar(100),
  City varchar(100)
);

⬅ في هذا المثال، سيتم إنشاء Clustered Index تلقائيًا على CustomerID.


📌 ما هو Non-Clustered Index؟

هو فهرس منفصل لا يُغير ترتيب البيانات في الجدول، لكنه يحتوي على مؤشرات (Pointers) إلى الصفوف الفعلية.

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

CREATE NONCLUSTERED INDEX idx_city
ON Customers (City);

⬅ هذا ينشئ Non-Clustered Index على عمود City.


📊 مقارنة بين النوعين:

العنصر Clustered Index Non-Clustered Index
ترتيب البيانات مرتبة فعليًا حسب الفهرس لا تُرتب فعليًا – يحتوي فقط على مؤشرات
عدد الفهارس واحد فقط لكل جدول عدة فهارس ممكنة
الأداء أفضل في البحث بالنطاق (range queries) أفضل في البحث عن قيمة معينة
الحجم أكبر لأن البيانات كلها مرتبة أخف، لأنه يحتوي فقط على نسخة جزئية

💡 ملاحظات مهمة:

  • وجود فهرس لا يضمن دائمًا تحسين الأداء – يجب تحليله حسب نوع الاستعلامات.
  • قد يؤثر الفهرس على سرعة الإدراج (INSERT) والتعديل (UPDATE).
  • من الأفضل فهرسة الأعمدة التي تُستخدم بكثرة في WHERE أو JOIN أو ORDER BY.

تعليقات

المشاركات الشائعة من هذه المدونة

HTML - Text Formatting تنسيقات النص

1.1 SQL Introduction

Entity Framework - مقدمة عن Entity Framework