Query Optimization
Avoid SELECT *
// ❌ Bad - Retrieves all columns
var products = await context.Products.ToListAsync();
// ✅ Good - Only needed columns
var products = await context.Products
.Select(p => new { p.Id, p.Name, p.Price })
.ToListAsync();
Use Pagination
var products = await context.Products
.OrderBy(p => p.Id)
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToListAsync();
Index Properly
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.HasIndex(p => p.Name);
modelBuilder.Entity<Order>()
.HasIndex(o => new { o.CustomerId, o.OrderDate });
}
Async All the Way
// ✅ Good
var products = await context.Products.ToListAsync();
// ❌ Bad - Blocking
var products = context.Products.ToList();