Espaces de tables¶
Un paradigme courant dans l’optimisation des performances des systèmes de base de données est l’utilisation des espaces de tables pour organiser l’agencement sur disque.
Avertissement
Django ne crée pas d’espace de tables pour vous. Consultez la documentation de votre moteur de base de données pour plus de détails sur la création et la gestion d’espaces de tables.
Déclaration d’espaces de tables pour les tables¶
Un espace de tables peut être indiqué pour une table générée par un modèle en renseignant l’option db_tablespace
dans la class Meta
du modèle. Cette option affecte aussi les tables créées automatiquement pour les champs ManyToManyField
du modèle.
Vous pouvez utiliser le réglage DEFAULT_TABLESPACE
pour indiquer une valeur par défaut pour db_tablespace
. C’est utile pour définir un espace de tables pour les applications Django de base et pour d’autres applications dont vous ne maîtrisez pas le code.
Déclaration des espaces de tables pour les index¶
Vous pouvez transmettre l’option db_tablespace
à un constructeur d’un champ Field
pour indiquer un espace de tables différent pour l’index de la colonne du champ. Si aucun index n’est créé pour la colonne en question, l’option est ignorée.
Vous pouvez utiliser le réglage DEFAULT_INDEX_TABLESPACE
pour indiquer une valeur par défaut pour db_tablespace
.
Si db_tablespace
n’est pas renseigné et que DEFAULT_INDEX_TABLESPACE
n’a pas été défini, l’index est créé dans le même espace de table que les tables.
Un exemple¶
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)
edges = models.ManyToManyField(to="self", db_tablespace="indexes")
class Meta:
db_tablespace = "tables"
Dans cet exemple, les tables générées par le modèle TablespaceExample
(c’est-à-dire la table du modèle et la table plusieurs-à-plusieurs) seront stockées dans l’espace de tables tables
. L’index du champ name
et les index de la table plusieurs-à-plusieurs seront stockés dans l’espace de tables indexes
. Le champ data
génère aussi un index, mais aucun espace de tables n’est indiqué, il sera donc stocké par défaut dans l’espace de tables tables
.
Prise en charge des bases de données¶
PostgreSQL et Oracle prennent en charge les espaces de tables, au contraire de SQLite et MySQL.
Lorsque vous utilisez un moteur qui ne prend pas en charge les espaces de tables, Django ignore toutes les options liées aux espaces de tables.