12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- ===========
- 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.
|