Skip to main content

表空间

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

警告

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

声明表的表空间

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

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

声明索引的表空间

您可以将 db_tablespace 选项传递给 Field 构造函数,以为 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字段的索引和many-to-many表上的索引将存储在 indexes 表空间中。 data 字段也将生成索引,但没有指定它的表空间,因此它将默认存储在模型表空间 tables 中。

数据库支持

PostgreSQL和Oracle支持表空间。 SQLite和MySQL没有。

当您使用不支持表空间的后端时,Django会忽略所有与表空间相关的选项。