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 Index pour indiquer le nom d’un espace de table à utiliser pour l’index. Pour les index de champ unique, 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)
    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')]

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. L’index du champ shortcut sera stocké dans l’espace de table other_indexes.

Prise en charge des bases de données

PostgreSQL et Oracle prennent en charge les espaces de tables, au contraire de SQLite, MariaDB 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.

Back to Top