Skip to main content

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();