How to optimize Django ORM queries for better performance
Answered
22
My Django application is slow. Database queries are taking forever. How can I optimize my ORM queries?
O
Asked by
omar_linux
Platinum
•
593 rep
1 Answer
26
Django ORM optimization is crucial for performance. Here are the key techniques:
Use select_related and prefetch_related
# Bad: N+1 queries
for book in Book.objects.all():
print(book.author.name)
# Good: One query with JOIN
books = Book.objects.select_related('author')
for book in books:
print(book.author.name)
# For many-to-many relationships
books = Book.objects.prefetch_related('tags')
Use only() and defer()
# Only fetch needed fields
users = User.objects.only('id', 'username')
# Defer heavy fields
articles = Article.objects.defer('content')
Use database indexes
class Article(models.Model):
title = models.CharField(max_length=200)
class Meta:
indexes = [
models.Index(fields=['title']),
]
P
Platinum
•
447 rep
Your Answer
You need to be logged in to answer questions.
Log In to Answer