Пространства имен таблиц
Общим подходом для оптимизации производительности в системах баз данных является использование пространств имен таблиц для организации расположения данных на диске.
Предупреждение
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. Индекс для поля «имя» и индексы таблицы «многие ко многим» будут храниться в пространстве имён таблиц 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/4.1/topics/db/tablespaces/