Referens till modellindexLink to this heading

Indexklasser underlättar skapandet av databasindex. De kan läggas till med hjälp av alternativet Meta.indexes. Detta dokument förklarar API-referenserna för Index som inkluderar index options.

alternativ för IndexLink to this heading

class Index(*expressions, fields=(), name=None, db_tablespace=None, opclasses=(), condition=None, include=None)Link to this definition

Skapar ett index (B-Tree) i databasen.

uttryckLink to this heading

Index.expressionsLink to this definition

Det positionella argumentet *expressions gör det möjligt att skapa funktionella index på uttryck och databasfunktioner.

Till exempel:

Code
Index(Lower("title").desc(), "pub_date", name="lower_title_date_idx")

skapar ett index på det gemena värdet i fältet title i fallande ordning och fältet pub_date i stigande ordning som standard.

Ett annat exempel:

Code
Index(F("height") * F("weight"), Round("weight"), name="calc_idx")

skapar ett index på resultatet av multiplikationen av fälten höjd och vikt och vikt avrundat till närmaste heltal.

Index.name krävs när man använder *expressions.

fältLink to this heading

Index.fieldsLink to this definition

En lista eller tupel med namnet på de fält som indexet önskas för.

Som standard skapas index med stigande ordning för varje kolumn. Om du vill definiera ett index med fallande ordning för en kolumn lägger du till ett bindestreck före fältets namn.

Till exempel: skulle Index(fields=['headline', '-pub_date']) skapa SQL med (headline, pub_date DESC).

namnLink to this heading

Index.nameLink to this definition

Namnet på indexet. Om name inte anges kommer Django automatiskt att generera ett namn. För kompatibilitet med olika databaser får indexnamn inte vara längre än 30 tecken och bör inte börja med en siffra (0-9) eller understreck (_).

db_tablespaceLink to this heading

Index.db_tablespaceLink to this definition

Namnet på det databas-tabellutrymme som ska användas för detta index. För index med ett enda fält skapas indexet i fältets db_tablespace om db_tablespace inte anges.

Om Field.db_tablespace inte anges (eller om indexet använder flera fält) skapas indexet i det tablespace som anges i db_tablespace-alternativet i modellens class Meta. Om inget av dessa tablespaces är angivet skapas indexet i samma tablespace som tabellen.

opklasserLink to this heading

Index.opclassesLink to this definition

Namnen på PostgreSQL-operatörsklasserna som ska användas för detta index. Om du behöver en anpassad operatörsklass måste du tillhandahålla en för varje fält i indexet.

Till exempel: skapar GinIndex(name='json_index', fields=['jsonfield'], opclasses=['jsonb_path_ops']) ett ginindex på jsonfield med hjälp av jsonb_path_ops.

`` Opclasses`` ignoreras för databaser förutom PostgreSQL.

Index.name krävs när man använder opclasses.

villkorLink to this heading

Index.conditionLink to this definition

Om tabellen är mycket stor och dina frågor oftast riktar sig till en delmängd av rader kan det vara användbart att begränsa ett index till den delmängden. Ange ett villkor som en Q. Till exempel:, condition=Q(pages__gt=400) indexerar poster med mer än 400 sidor.

Index.name krävs när man använder condition.

inkluderaLink to this heading

Index.includeLink to this definition

En lista eller tupel med namnen på de fält som ska ingå i täckningsindexet som icke-nyckelkolumner. Detta gör att skanningar med enbart index kan användas för frågor som endast väljer inkluderade fält (include) och endast filtrerar efter indexerade fält (fields).

Till exempel:

Code
Index(name="covering_index", fields=["headline"], include=["pub_date"])

gör det möjligt att filtrera på headline och även välja pub_date, samtidigt som data endast hämtas från indexet.

Om du använder include får du ett mindre index än om du använder ett index med flera kolumner, men nackdelen är att kolumner som inte är nyckelkolumner inte kan användas för sortering eller filtrering.

include ignoreras för databaser förutom PostgreSQL.

Index.name krävs vid användning av include.

Se PostgreSQL-dokumentationen för mer information om täckande index.