=========== Tablespaces =========== A common paradigm for optimizing performance in database systems is the use of `tablespaces`_ to organize disk layout. .. _`tablespaces`: http://en.wikipedia.org/wiki/Tablespace .. warning:: Django does not create the tablespaces for you. Please refer to your database engine's documentation for details on creating and managing tablespaces. Declaring tablespaces for tables -------------------------------- A tablespace can be specified for the table generated by a model by supplying the :attr:`~django.db.models.Options.db_tablespace` option inside the model's ``class Meta``. This option also affects tables automatically created for :class:`~django.db.models.ManyToManyField`\ s in the model. You can use the :setting:`DEFAULT_TABLESPACE` setting to specify a default value for :attr:`~django.db.models.Options.db_tablespace`. This is useful for setting a tablespace for the built-in Django apps and other applications whose code you cannot control. Declaring tablespaces for indexes --------------------------------- You can pass the :attr:`~django.db.models.Field.db_tablespace` option to a ``Field`` constructor to specify an alternate tablespace for the ``Field``'s column index. If no index would be created for the column, the option is ignored. You can use the :setting:`DEFAULT_INDEX_TABLESPACE` setting to specify a default value for :attr:`~django.db.models.Field.db_tablespace`. If :attr:`~django.db.models.Field.db_tablespace` isn't specified and you didn't set :setting:`DEFAULT_INDEX_TABLESPACE`, the index is created in the same tablespace as the tables. An example ---------- .. code-block:: python 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" In this example, the tables generated by the ``TablespaceExample`` model (i.e. the model table and the many-to-many table) would be stored in the ``tables`` tablespace. The index for the name field and the indexes on the many-to-many table would be stored in the ``indexes`` tablespace. The ``data`` field would also generate an index, but no tablespace for it is specified, so it would be stored in the model tablespace ``tables`` by default. Database support ---------------- PostgreSQL and Oracle support tablespaces. SQLite and MySQL don't. When you use a backend that lacks support for tablespaces, Django ignores all tablespace-related options. .. versionchanged:: 1.4 Since Django 1.4, the PostgreSQL backend supports tablespaces.