表空间 — Django 文档
表空间
优化数据库系统性能的一个常见范例是使用 表空间 来组织磁盘布局。
警告
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 会忽略所有与表空间相关的选项。