表空间

优化数据库系统性能的一个常见范例是使用 tablespaces 组织磁盘布局。

警告

Django不会为您创建表空间。有关创建和管理表空间的详细信息,请参阅数据库引擎的文档。

为表声明表空间

可以为模型生成的表指定表空间,方法是提供 db_tablespace 模型中的选项 class Meta . 此选项还影响为自动创建的表 ManyToManyField 在模型中。

你可以使用 DEFAULT_TABLESPACE 为指定默认值的设置 db_tablespace . 这对于为内置的django应用程序和其他无法控制代码的应用程序设置表空间很有用。

为索引声明表空间

你可以通过 db_tablespace 选项为 Index 构造函数指定用于索引的表空间的名称。对于单字段索引,可以通过 db_tablespace 选项A 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会忽略所有与表空间相关的选项。