表空间¶
数据库系统中优化性能的一种常见范式是使用表空间来组织磁盘布局。
警告
Django 不会为您创建表空间。有关创建和管理表空间的详细信息,请参阅您的数据库引擎文档。
为表声明表空间¶
可以通过在模型的class Meta
中提供db_tablespace
选项来为模型生成的表指定表空间。此选项也会影响为模型中的ManyToManyField
自动创建的表。
您可以使用DEFAULT_TABLESPACE
设置来为db_tablespace
指定默认值。这对于为内置的 Django 应用程序和其他无法控制其代码的应用程序设置表空间很有用。
为索引声明表空间¶
您可以将db_tablespace
选项传递给Index
构造函数以指定用于索引的表空间的名称。对于单字段索引,您可以将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)
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 会忽略所有与表空间相关的选项。