Табличные пространства

Общая парадигма для оптимизации производительности в системах баз данных заключается в использовании tablespaces для распределения данных по дискам.

Предупреждение

Django не создаёт табличные пространства для вас. Пожалуйста, обратитесь к документации на вашу базу данных насчёт подробностей по созданию и управлению табличными пространствами.

Определение табличных пространств для таблиц

Для таблицы, созданной по модели, может быть указано табличное пространство с помощью атрибута db_tablespace внутри класса Meta. Этот атрибут также имеет влияние на таблицы, которые автоматически создаются для ManyToManyField полей в модели.

Вы можете использовать параметр конфигурации DEFAULT_TABLESPACE для указания значения по-умолчанию для атрибута db_tablespace. Данный параметр полезен для определения табличного пространства для встроенных приложений Django и для других приложений, код которых вы не можете контроллировать.

Определение табличных пространств для индексов

Вы можете передать опцию db_tablespace в конструктор Index, чтобы указать табличное пространство для индекса. Для индекса одного поля вы можете передать опцию db_tablespace в конструктор Field, чтобы указать табличное пространство для индекса этого поля. Атрибут игнорируется, если не требуется создавать индекс.

Вы можете использовать параметр конфигурации DEFAULT_INDEX_TABLESPACE для указания значения по-умолчанию для атрибута db_tablespace.

Если атрибут db_tablespace не определён и вы не задали значение для параметра конфигурации DEFAULT_INDEX_TABLESPACE, индекс будет создан в том же табличном пространстве, что и сама таблица.

Пример

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')]

В данном примере, таблицы, созданные для модели TablespaceExample (т.е., таблица модели и таблица для связи многие-ко-многим), будут размещены в табличном пространстве tables. Индекс для поля name и индекс для таблицы связей многие-ко-многим будут размещены в табличном пространстве indexes. Поле data также создаёт индекс, но для него не указано никакого табличного пространства, таким образом, индекс будет создан в табличном пространстве tables по-умолчанию. Индекс поля shortcut будет размещен в табличном пространстве other_indexes.

Поддержка баз данных

PostgreSQL и Oracle поддерживают табличные пространства. SQLite, MariaDB и MySQL не поддерживают.

При использовании бэкэнда, который не обеспечивает поддержку табличных пространств, Django будет игнорировать все атрибуты для табличных пространств.