
آموزش index در EF Core
در دنیای نرمافزار و پایگاهداده، عملکرد (Performance) حرف اول را میزند. اگر با Entity Framework Core کار میکنید، قطعاً با مفهوم ایندکس (Index) برخورد کردهاید یا بهزودی برخورد خواهید کرد. ایندکس یکی از مهمترین ابزارهاییست که به برنامه کمک میکند کوئریها را سریعتر اجرا کند. درآموزش index در EF Core و Asp.Net Core بررسی میکنیم که ایندکس چیست، در چه روابطی کاربرد دارد، چرا باید نامگذاری شود و چه تاثیری بر جستجوها (Search) دارد. با آموزش index در EF Core با ما همراه باشید.
ایندکس چیست و چه کاربردی دارد؟
ایندکس ساختاری در دیتابیس است. که با هدف افزایش سرعت جستجو و بازیابی اطلاعات طراحی شده. بدون ایندکس، دیتابیس برای یافتن یک رکورد باید همه ردیفها را بررسی کند (Table Scan). که بسیار کند است. اما با وجود ایندکس، پایگاهداده میتواند خیلی سریع و مستقیم به رکورد برسد.
در Entity Framework Core، ایندکسها (Indexes) نقش بسیار مهمی در بهینهسازی عملکرد کوئریها دارند. ایندکس در پایگاه داده باعث میشود جستجوها و عملیاتهای فیلتر (مانند WHERE یا ORDER BY) سریعتر انجام شوند.
نکات مهم در مورد ایندکسها
- ایندکس روی کلید اصلی (Primary Key) و کلید خارجی (Foreign Key) بهصورت خودکار ساخته میشود.
- ایندکسها سرعت خواندن را بالا میبرند ولی ممکن است سرعت نوشتن (Insert/Update/Delete) را کمی کاهش دهند.
- ایندکس روی فیلدهایی که زیاد تغییر میکنند (مانند LastLoginDate) باید با دقت استفاده شود.
- ایندکس زیاد باعث سنگینی دیتابیس و کاهش سرعت نوشتن میشود.
- ایندکس فقط زمانی مفید است که روی ستونهایی باشد که در کوئریها زیاد استفاده میشوند (مثلاً در WHERE, ORDER BY, JOIN).
چه زمانی ایندکس نزنیم؟
- روی فیلدهایی که مرتب تغییر میکنند (مثل تاریخ ویرایش)
- روی فیلدهایی با دادههای کاملاً یکتا که کمتر فیلتر میشوند
- وقتی تعداد زیادی ایندکس باعث افت سرعت درج یا حذف میشود
تعریف index در EF Core
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 });نامگذاری index در EF Core
اگرچه EF Core به صورت خودکار نامی برای ایندکس ایجاد میکند، بهتر است نامگذاری را دستی انجام دهید. چرا؟
- افزایش خوانایی کد و migration
- جلوگیری از تداخل نام در پروژههای بزرگ
- سازگاری با قواعد naming دیتابیس
- امکان حذف یا مدیریت دقیقتر ایندکس در Migration
modelBuilder.Entity<User>()
.HasIndex(u => u.Email)
.HasDatabaseName("Index_Email");تعریف ایندکس یکتا – Unique Index
گاهی اوقات یک ستون در جدول Database نباید مقدار تکراری داشته باشد. بهعنوان مثال، هر کاربر باید ایمیل منحصربهفردی داشته باشد. برای این کار باید از ایندکس یکتا (Unique Index) استفاده کرد.
modelBuilder.Entity<User>()
.HasIndex(u => u.Email)
.IsUnique();































فرم افزودن دیدگاه
با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.