Back to all reviewers

Prevent N+1 database queries

getsentry/sentry
Based on 5 comments
Python

Avoid N+1 database queries by using appropriate Django ORM features like select_related(), prefetch_related(), and bulk operations. N+1 queries occur when you access related objects in a loop, causing additional database queries for each iteration.

Database Python

Reviewer Prompt

Avoid N+1 database queries by using appropriate Django ORM features like select_related(), prefetch_related(), and bulk operations. N+1 queries occur when you access related objects in a loop, causing additional database queries for each iteration.

Key practices:

  1. Use select_related() for ForeignKey relationships
  2. Use prefetch_related() for reverse ForeignKey/ManyToMany relationships
  3. Use bulk operations instead of saving in loops

Example - Instead of:

# Creates N+1 queries
for event_type in event_types:
    event_type_snapshot = deepcopy(event_type)
    nullify_id(event_type_snapshot)
    event_type_snapshot.snuba_query = snuba_query_snapshot
    event_type_snapshot.save()

Use:

# Single bulk operation
event_type_snapshots = []
for event_type in event_types:
    event_type_snapshot = deepcopy(event_type)
    nullify_id(event_type_snapshot)
    event_type_snapshot.snuba_query = snuba_query_snapshot
    event_type_snapshots.append(event_type_snapshot)
EventType.objects.bulk_create(event_type_snapshots)

# Or for related objects:
team_members = OrganizationMemberTeam.objects.filter(team=team).select_related('organizationmember')
5
Comments Analyzed
Python
Primary Language
Database
Category

Source Discussions