← Back to TIL

lazy loading vs eager loading

Jan 13, 2026

databaseormperformance

lazy loading and eager loading describe when related data is fetched, regardless of language or framework.

lazy loading defers loading related data until it’s accessed.

# python / sqlalchemy example
user = db.query(User).first()
posts = user.posts  # triggers an extra query

pros: minimal upfront work
cons: accidental n+1 queries, especially inside loops

eager loading fetches related data as part of the initial query.

from sqlalchemy.orm import selectinload

user = (
    db.query(User)
    .options(selectinload(User.posts))
    .first()
)

pros: predictable performance, fewer queries
cons: potential overfetching

rule of thumb:

  • lazy loading is fine for singular, optional access
  • eager loading is safer for lists, APIs, and production traffic