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
Answered by python_dev 1 week, 2 days ago
Platinum 447 rep

Your Answer

You need to be logged in to answer questions.

Log In to Answer

Hot Questions

No hot questions available.