در دنیای نرمافزار و پایگاهداده، عملکرد (Performance) حرف اول را میزند. اگر با Entity Framework Core کار میکنید، قطعاً با مفهوم ایندکس (Index) برخورد کردهاید یا بهزودی برخورد خواهید کرد. ایندکس یکی از مهمترین ابزارهاییست که به برنامه کمک میکند کوئریها را سریعتر اجرا کند. درآموزش index در EF Core و Asp.Net Core بررسی میکنیم که ایندکس چیست، در چه روابطی کاربرد دارد، چرا باید نامگذاری شود و چه تاثیری بر جستجوها (Search) دارد. با آموزش index در EF Core با ما همراه باشید.
ایندکس ساختاری در دیتابیس است. که با هدف افزایش سرعت جستجو و بازیابی اطلاعات طراحی شده. بدون ایندکس، دیتابیس برای یافتن یک رکورد باید همه ردیفها را بررسی کند (Table Scan). که بسیار کند است. اما با وجود ایندکس، پایگاهداده میتواند خیلی سریع و مستقیم به رکورد برسد.
در Entity Framework Core، ایندکسها (Indexes) نقش بسیار مهمی در بهینهسازی عملکرد کوئریها دارند. ایندکس در پایگاه داده باعث میشود جستجوها و عملیاتهای فیلتر (مانند WHERE یا ORDER BY) سریعتر انجام شوند.
EF Core از طریق Fluent API امکان تعریف ایندکس را فراهم کرده است.
نکته مهم : در حال حاضر (EF Core 9)، Data Annotation مستقیمی برای ایندکس وجود ندارد. یعنی نمیتوان با Attributes مثل [Index] این کار را انجام داد (در EF6 امکانپذیر بود اما در EF Core حذف شده است).
modelBuilder.Entity<User>()
.HasIndex(u => u.Email);
modelBuilder.Entity<Order>()
.HasIndex(o => new { o.CustomerId, o.ProductId });
اگرچه EF Core به صورت خودکار نامی برای ایندکس ایجاد میکند، بهتر است نامگذاری را دستی انجام دهید. چرا؟
modelBuilder.Entity<User>()
.HasIndex(u => u.Email)
.HasDatabaseName("Index_Email");
گاهی اوقات یک ستون در جدول Database نباید مقدار تکراری داشته باشد. بهعنوان مثال، هر کاربر باید ایمیل منحصربهفردی داشته باشد. برای این کار باید از ایندکس یکتا (Unique Index) استفاده کرد.
modelBuilder.Entity<User>()
.HasIndex(u => u.Email)
.IsUnique();