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.
تعليقات
إرسال تعليق