Users

Loading 20 records. Compare query count and execution time between the two approaches.

Problem

The loop calls u.reviews.count() for each user. The reviews relationship is a reverse ForeignKey — Django fires a SELECT COUNT(*) query per user. For N users, you get N extra COUNT queries. Result: N+1 queries.

User.objects.all()
# template calls u.reviews.count() per user

Fix

annotate(review_count=Count('reviews')) adds the count directly into the main SQL query via a COUNT() subquery. The result is available as a plain attribute — 1 query total.

User.objects.annotate(review_count=Count('reviews'))

Unoptimized

21 queries 13.0 ms
N+1 detected: 21 queries for 20 rows
Email Name # Reviews
[email protected] Hermila Ochoa 9
[email protected] Ty Boyer 5
[email protected] David Vazquez 9
[email protected] Lewis Calhoun 6
[email protected] Refugio Suarez 2
[email protected] Kerry Moses 9
[email protected] Kandace Washington 5
[email protected] Cathey Strickland 9
[email protected] Cassaundra Whitaker 3
[email protected] Rodney Raymond 7
[email protected] Timothy Melendez 1
[email protected] Dreama Christensen 8
[email protected] Allen Holmes 7
[email protected] Shawana Forbes 10
[email protected] Romaine Juarez 4
[email protected] Mariano Camacho 7
[email protected] Leisha Walls 3
[email protected] Nevada Reeves 4
[email protected] Chuck Vinson 2
[email protected] Genie Moore 5

Optimized

1 queries 4.6 ms
21 queries reduced to 1 (13.0ms to 4.6ms)
Email Name # Reviews
[email protected] Hermila Ochoa 9
[email protected] Ty Boyer 5
[email protected] David Vazquez 9
[email protected] Lewis Calhoun 6
[email protected] Refugio Suarez 2
[email protected] Kerry Moses 9
[email protected] Kandace Washington 5
[email protected] Cathey Strickland 9
[email protected] Cassaundra Whitaker 3
[email protected] Rodney Raymond 7
[email protected] Timothy Melendez 1
[email protected] Dreama Christensen 8
[email protected] Allen Holmes 7
[email protected] Shawana Forbes 10
[email protected] Romaine Juarez 4
[email protected] Mariano Camacho 7
[email protected] Leisha Walls 3
[email protected] Nevada Reeves 4
[email protected] Chuck Vinson 2
[email protected] Genie Moore 5

Back to all queries