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을 사용하면 내림차순 인덱스가 인덱스로 생성된다.