Табличные пространства¶
Общей парадигмой для оптимизации производительности в системах баз данных является использование tablespaces для организации дисковой разметки.
Предупреждение
Django не создает табличные пространства за вас. Пожалуйста, обратитесь к документации вашего движка базы данных для получения подробной информации о создании и управлении табличными пространствами.
Объявление табличных пространств для таблиц¶
Табличное пространство может быть указано для таблицы, создаваемой моделью, с помощью опции db_tablespace
внутри class Meta
модели. Эта опция также влияет на таблицы, автоматически создаваемые для ManyToManyField
s в модели.
Вы можете использовать параметр 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 и индексы таблицы many-to-many будут храниться в табличном пространстве indexes
. Поле data
также будет генерировать индекс, но для него не указано табличное пространство, поэтому по умолчанию оно будет храниться в табличном пространстве модели tables
. Индекс для поля shortcut
будет храниться в табличном пространстве other_indexes
.
Поддержка базы данных¶
PostgreSQL и Oracle поддерживают табличные пространства. SQLite, MariaDB и MySQL не поддерживают.
Когда вы используете бэкенд, который не поддерживает табличные пространства, Django игнорирует все опции, связанные с табличными пространствами.