Табличные пространства
Распространённый подход для оптимизации производительности в системах баз данных — использование табличных пространств для организации расположения на диске.
Предупреждение
Django не создаёт табличные пространства за вас. Обратитесь к документации вашего движка базы данных для подробностей о создании и управлении табличными пространствами.
Определение табличных пространств для таблиц
Для таблицы, генерируемой моделью, можно указать табличное пространство, передав параметр
db_tablespace в
class 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 игнорирует все параметры, связанные с ними.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.2/topics/db/tablespaces/