[파이썬][Django] 인덱스 및 성능 최적화 방법과 예제
Django에서 데이터베이스 인덱스를 생성하고 성능을 최적화하는 방법과 예제를 살펴보겠습니다. 데이터베이스 인덱스는 데이터베이스에서 데이터를 효율적으로 검색하기 위한 중요한 도구 중 하나입니다.
1. 모델 필드에 인덱스 추가
Django 모델에서 데이터베이스 인덱스를 추가하려면 db_index
속성을 사용합니다. 예를 들어, “title” 필드에 인덱스를 추가하는 방법은 다음과 같습니다:
class MyModel(models.Model):
title = models.CharField(max_length=100, db_index=True)
# 다른 필드들...
2. 고급 인덱스 옵션
더 세밀한 제어를 위해 indexes
및 unique_together
와 같은 모델 옵션을 사용할 수 있습니다. 아래는 예제입니다:
class MyModel(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
class Meta:
indexes = [
models.Index(fields=['title'], name='title_idx'), # 단일 필드 인덱스
]
unique_together = ['title', 'content'] # 고유성 제약조건 (유니크 인덱스)
3. 마이그레이션 생성
모델에서 인덱스를 정의하면, 마이그레이션을 생성하여 데이터베이스 스키마를 업데이트해야 합니다:
python manage.py makemigrations
python manage.py migrate
4. 쿼리 최적화
데이터베이스 쿼리를 최적화하여 성능을 향상시킬 수 있습니다. 이를 위해 select_related()
와 prefetch_related()
와 같은 메서드를 사용하여 관련된 객체를 미리로드하거나, 필요한 필드만 선택하는 것이 중요합니다.
# select_related()를 사용하여 관련 객체를 미리로드
author = Author.objects.select_related('book').get(id=1)
# prefetch_related()를 사용하여 ManyToMany 필드의 관련 객체를 미리로드
author = Author.objects.prefetch_related('books').get(id=1)
5. 쿼리 및 DB 인덱스 모니터링
Django Debug Toolbar와 같은 도구를 사용하여 애플리케이션의 쿼리 및 DB 인덱스 성능을 모니터링하고 최적화할 수 있습니다.
이러한 방법을 사용하여 Django 애플리케이션의 데이터베이스 성능을 최적화할 수 있습니다. 중요한 것은 데이터베이스 인덱스를 올바르게 사용하고 쿼리를 최적화하는 것입니다.