Django model - Model index reference
Index 클래스를 사용하면 데이터베이스 인덱스를 쉽게 만들 수 있다. Meta.indexes 옵션을 사용하여 추가될 수 있다. 이 문서는 index option을 포함하는 Index의 API 레퍼런스를 설명한다.
Referencing built-in indexes
인덱스는 django.db.models.indexes에 정의되어 있지만, 편의를 위해 django.db.models안에 import 되어 있다. 표준 규칙은 from django.db import models를 사용하고 models.<IndexClass>를 사용하여 인덱스를 참조하는 것이다.
class Index(fields=(), name=None, db_tablespace=None)
데이터베이스에서 인덱스 (B-Tree)를 생성한다.
Index.fields
인덱스가 필요한 필드 이름의 리스트 또는 튜플.
기본적으로, 각 칼럼의 인덱스는 오름차순 정렬로 생성된다. 칼럼을 내림차순으로 정렬하는 인덱스를 정의하려면, 필드 이름 앞에 하이픈을 추가한다.
예를 들어 Index(fields=['headline', '-pub_date'])는 (headline, pub_date DESC) SQL로 생성된다. MySQL에서는 인덱스 정렬을 지원하지 않는다. 이런 경우, 일반적인 인덱스로써 내림차순 인덱스가 생성된다.
Changed in Django 2.1:
이전 버전에서는 튜플을 허용하지 않았다.
Index.name
인덱스의 이름. name이 제공되지 않으면 Django는 자동으로 생성한다. 다른 데이터베이스와 호환성을 위해, 인덱스 이름은 30 character를 넘을 수 없고 숫자(0-9) 또는 언더스코어(_)로 시작할 수 없다.
Index.db_tablespace
New in Django 2.0:
이 인덱스가 사용할 데이터베이스 테이블스페이스의 이름. 단일 필드 인덱스의 경우 db_tablespace가 제공되지 않으면, 인덱스는 필드의 db_tablespace에 생성된다.
Field.db_tablespace가 지정되지 않으면 (또는 다중 필드 인덱스가 사용되면), 인덱스는 모델의 class Meta안의 db_tablespace 옵션에 지정된 테이블스페이스에 생성된다. 테이블스페이스가 어느 쪽도 지정되지 않으면, 인덱스는 테이블과 같은 테이블스페이스에 생성된다.
PostgreSQL에서 지정된 인덱스들의 목록은, django.contrib.postgres.indexes를 봐라.