表空间 — Django 文档

来自菜鸟教程
Django/docs/3.0.x/topics/db/tablespaces
跳转至:导航、​搜索

表空间

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

警告

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


为表声明表空间

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

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


为索引声明表空间

您可以将 db_tablespace 选项传递给 Index 构造函数以指定用于索引的表空间的名称。 对于单字段索引,您可以将 db_tablespace 选项传递给 Field 构造函数,以便为字段的列索引指定备用表空间。 如果该列没有索引,则忽略该选项。

您可以使用 :setting:`DEFAULT_INDEX_TABLESPACE` 设置来指定 db_tablespace 的默认值。

如果未指定 db_tablespace 并且您没有设置 :setting:`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、MariaDB 和 MySQL 没有。

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