Entity Framework - Fluent API إنشاء الفهارس باستخدام HasIndex()

9.6 Entity Framework - إنشاء الفهارس باستخدام HasIndex()

العمل مع قواعد البيانات الكبيرة يتطلب تحسين أداء الاستعلامات، وأحد أهم وسائل تحسين الأداء هو إنشاء الفهارس (Indexes) على الأعمدة. في Entity Framework Core، باستخدام Fluent API، يمكنك إنشاء الفهارس بسهولة باستخدام الدالة HasIndex().


🔹 ما هو الفهرس (Index) في قواعد البيانات؟

الفهرس عبارة عن هيكل بيانات يُستخدم لتسريع عمليات البحث والاستعلام عن السجلات داخل الجداول. وجود الفهرس يجعل عملية البحث عن قيمة معينة أسرع بكثير مقارنة بالبحث بدون فهرس.

🔹 كيفية إنشاء فهرس باستخدام HasIndex()

يمكنك إنشاء فهرس على عمود معين أو مجموعة من الأعمدة باستخدام HasIndex() داخل OnModelCreating.


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>(entity =>
    {
        entity.HasIndex(p => p.Name);
    });
}

في هذا المثال سيتم إنشاء فهرس على عمود Name في جدول Products لتحسين عمليات البحث عن الأسماء.

🔹 إنشاء فهرس مركب (Composite Index)

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


modelBuilder.Entity<Order>(entity =>
{
    entity.HasIndex(o => new { o.CustomerId, o.OrderDate });
});

في هذا المثال، سيتم إنشاء فهرس مشترك بين CustomerId وOrderDate.

🔹 تعيين اسم مخصص للفهرس

يمكنك تحديد اسم خاص للفهرس بدل أن يختار EF Core اسمًا افتراضيًا.


modelBuilder.Entity<Product>(entity =>
{
    entity.HasIndex(p => p.Name)
          .HasDatabaseName("IX_Products_Name");
});

هنا سيتم إنشاء الفهرس باسم IX_Products_Name.

🔹 إنشاء فهرس فريد (Unique Index)

إذا كنت تريد أن تكون القيم في العمود فريدة (لا تتكرر)، يمكنك تعيين الفهرس كـ Unique.


modelBuilder.Entity<Product>(entity =>
{
    entity.HasIndex(p => p.SKU)
          .IsUnique();
});

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

🔹 فوائد استخدام HasIndex()

  • تسريع أداء عمليات البحث (SELECT).
  • تحسين أداء عمليات الانضمام (JOIN) بين الجداول.
  • فرض فريدية القيم عبر IsUnique().

🔹 ملاحظات هامة

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

🔹 الخلاصة

إنشاء الفهارس باستخدام HasIndex() في Fluent API خطوة أساسية لتحسين أداء قواعد البيانات الكبيرة والمتوسطة، ويجب التخطيط لها بعناية لضمان أفضل أداء ممكن للتطبيقات التي تعتمد على EF Core.

تعليقات

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

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

1.1 SQL Introduction

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