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.
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:
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')
Enter the URL of a public GitHub repository