Bordsytor¶
En vanlig metod för att optimera prestanda i databassystem är att använda ”tablespaces” för att organisera disklayouten.
Varning
Django skapar inte tablespaces åt dig. Se dokumentationen för din databasmotor för detaljer om hur du skapar och hanterar tablespaces.
Deklarera tablespaces för tabeller¶
Ett tablespace kan anges för den tabell som genereras av en modell genom att ange alternativet db_tablespace
i modellens class Meta
. Detta alternativ påverkar även tabeller som skapas automatiskt för ManyToManyField
i modellen.
Du kan använda inställningen DEFAULT_TABLESPACE
för att ange ett standardvärde för db_tablespace
. Detta är användbart för att ställa in ett tablespace för de inbyggda Django-apparna och andra applikationer vars kod du inte kan kontrollera.
Deklarera tablespaces för index¶
Du kan skicka alternativet db_tablespace
till en Index
-konstruktör för att ange namnet på ett tablespace som ska användas för indexet. För index för enstaka fält kan du skicka alternativet db_tablespace
till en Field
-konstruktör för att ange ett alternativt tablespace för fältets kolumnindex. Om kolumnen inte har något index ignoreras alternativet.
Du kan använda inställningen DEFAULT_INDEX_TABLESPACE
för att ange ett standardvärde för db_tablespace
.
Om db_tablespace
inte anges och du inte har angett DEFAULT_INDEX_TABLESPACE
, skapas indexet i samma tablespace som tabellerna.
Ett exempel¶
class TablespaceExample(models.Model):
name = models.CharField(max_length=30, db_index=True, db_tablespace="indexes")
data = models.CharField(max_length=255, db_index=True)
shortcut = models.CharField(max_length=7)
edges = models.ManyToManyField(to="self", db_tablespace="indexes")
class Meta:
db_tablespace = "tables"
indexes = [models.Index(fields=["shortcut"], db_tablespace="other_indexes")]
I det här exemplet lagras de tabeller som genereras av modellen TablespaceExample
(dvs. modelltabellen och tabellen many-to-many) i tablespace tables
. Indexet för fältet name och indexen för tabellen many-to-many lagras i tablespace indexes
. Fältet data
skulle också generera ett index, men inget tablespace för det har angetts, så det skulle lagras i modellens tablespace tables
som standard. Indexet för fältet shortcut
skulle lagras i tablespace other_indexes
.
Stöd för databaser¶
PostgreSQL och Oracle stöder tablespaces. SQLite, MariaDB och MySQL gör det inte.
När du använder en backend som saknar stöd för tablespaces ignorerar Django alla tablespace-relaterade alternativ.