Общая парадигма для оптимизации производительности в системах баз данных заключается в использовании tablespaces для распределения данных по дискам.
Предупреждение
Django не создаёт табличные пространства для вас. Пожалуйста, обратитесь к документации на вашу базу данных насчёт подробностей по созданию и управлению табличными пространствами.
Для таблицы, созданной по модели, может быть указано табличное пространство с помощью атрибута db_tablespace внутри класса Meta. Этот атрибут также имеет влияние на таблицы, которые автоматически создаются для ManyToManyField полей в модели.
Вы можете использовать параметр конфигурации DEFAULT_TABLESPACE для указания значения по-умолчанию для атрибута db_tablespace. Данный параметр полезен для определения табличного пространства для встроенных приложений Django и для других приложений, код которых вы не можете контроллировать.
Вы можете передать атрибут 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)
edges = models.ManyToManyField(to="self", db_tablespace="indexes")
class Meta:
db_tablespace = "tables"
В данном примере, таблицы, созданные для модели TablespaceExample (т.е., таблица модели и таблица для связи многие-ко-многим), будут размещены в табличном пространстве tables. Индекс для поля name и индекс для таблицы связей многие-ко-многим будут размещены в табличном пространстве indexes. Поле data также создаёт индекс, но для него не указано никакого табличного пространства, таким образом, индекс будет создан в табличном пространстве tables по-умолчанию.
PostgreSQL и Oracle поддерживают табличные пространства. SQLite и MySQL не поддерживают.
При использовании бэкэнда, который не обеспечивает поддержку табличных пространств, Django будет игнорировать все атрибуты для табличных пространств.
Mar 31, 2016