# Documentation Django 3.1.9.dev

# 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.