DB에 인덱스 추가하기

Kangjik Kim·2025년 1월 8일
0

publish 필드로 db 인덱스를 정의해 보자.

인덱스를 추가할 경우 이 필드를 기준으로 결과를 필터링하거나 정렬하는 쿼리의 성능이 향상된다.

기본 값으로 publish 필드를 사용해 결과를 정렬하니, 많은 쿼리가 이 인덱스를 활용할 것이다.

from django.db import models
from django.utils import timezone

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250)
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    
    class Meta:
        ordering = ['-publish']
        indexes = [
            models.Index(fields=['-publish']),
        ]
    
    def __str__(self):
        return self.title
    

모델의 Meta 클래스에 indexes 옵션을 추가했다.

이 옵션을 사용하면 모델의 DB 인덱스를 정의할 수 있는데, 이 인덱스는 오름차순 또는 내림차순으로 하나 이상의 필드로 구성하거나 함수 표현식 및 DB 함수로 정의할 수 있다.

필드 이름 앞에 하이픈을 사용해 내림차순으로 정의할 수 있다.

이 인덱스의 생성은 나중에 데이터베이스 마이그레이션에 포함된다.

인덱스 순서 지정은 MySQL에서 지원되지 않는다.

MySQL을 사용하면 내림차순 인덱스가 인덱스로 생성된다.

0개의 댓글