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