Espacios de tablas

Un paradigma común para optimizar el rendimiento en sistemas de bases de datos es el uso de tablespaces para organizar la disposición del disco.

Advertencia

Django no crea las tablespaces por ti. Por favor, consulta la documentación de tu motor de base de datos para obtener detalles sobre la creación y gestión de tablespaces.

Declarando espacios de almacenamiento para tablas

Puedes especificar un espacio de almacenamiento para la tabla generada por un modelo suministrando la opción db_tablespace dentro de la clase Meta del modelo. Esta opción afecta también a las tablas creadas automáticamente para los campos relacionados muchos-a-muchos en el modelo.

Puedes utilizar la configuración DEFAULT_TABLESPACE para especificar un valor por defecto para db_tablespace. Esto es útil para establecer un espacio de almacenamiento para las aplicaciones de Django integradas y otras aplicaciones cuyo código no puedes controlar.

Declarando espacios de almacenamiento para índices

Puedes pasar la opción db_tablespace al constructor de Index para especificar el nombre del espacio de almacenamiento a utilizar para el índice. Para los índices de un solo campo, puedes pasar la opción db_tablespace al constructor de Field para especificar un espacio de almacenamiento alternativo para el índice de columna del campo. Si la columna no tiene un índice, la opción se ignora.

Puedes utilizar la configuración DEFAULT_INDEX_TABLESPACE para especificar un valor por defecto para db_tablespace.

Si no se especifica db_tablespace y no se ha establecido DEFAULT_INDEX_TABLESPACE, el índice se crea en el mismo espacio de almacenamiento que las tablas.

Un ejemplo

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")]

En este ejemplo, las tablas generadas por el modelo TablespaceExample (es decir, la tabla del modelo y la tabla muchos-a-muchos) se almacenarían en el espacio de almacenamiento tables. El índice para el campo name y los índices en la tabla muchos-a-muchos se almacenarían en el espacio de almacenamiento indexes. El campo data también generaría un índice, pero no se especifica ningún espacio de almacenamiento para él, por lo que se almacenaría en el espacio de almacenamiento del modelo tables por defecto. El índice para el campo shortcut se almacenaría en el espacio de almacenamiento other_indexes.

Compatibilidad con bases de datos

PostgreSQL y Oracle admiten espacios de almacenamiento. SQLite, MariaDB y MySQL no lo hacen.

Cuando utilizas un back-end que carece de soporte para tablespaces, Django ignora todas las opciones relacionadas con tablespaces.