2016-06-25 18:32:56 +02:00
|
|
|
=====================
|
|
|
|
Model index reference
|
|
|
|
=====================
|
|
|
|
|
|
|
|
.. module:: django.db.models.indexes
|
|
|
|
|
|
|
|
.. currentmodule:: django.db.models
|
|
|
|
|
2016-06-20 17:50:05 +02:00
|
|
|
Index classes ease creating database indexes. They can be added using the
|
|
|
|
:attr:`Meta.indexes <django.db.models.Options.indexes>` option. This document
|
|
|
|
explains the API references of :class:`Index` which includes the `index
|
|
|
|
options`_.
|
2016-06-25 18:32:56 +02:00
|
|
|
|
|
|
|
.. admonition:: Referencing built-in indexes
|
|
|
|
|
|
|
|
Indexes are defined in ``django.db.models.indexes``, but for convenience
|
|
|
|
they're imported into :mod:`django.db.models`. The standard convention is
|
|
|
|
to use ``from django.db import models`` and refer to the indexes as
|
|
|
|
``models.<IndexClass>``.
|
|
|
|
|
|
|
|
``Index`` options
|
|
|
|
=================
|
|
|
|
|
2018-03-08 16:56:55 +01:00
|
|
|
.. class:: Index(fields=(), name=None, db_tablespace=None)
|
2016-06-25 18:32:56 +02:00
|
|
|
|
|
|
|
Creates an index (B-Tree) in the database.
|
|
|
|
|
|
|
|
``fields``
|
2017-03-20 23:30:32 +01:00
|
|
|
----------
|
2016-06-25 18:32:56 +02:00
|
|
|
|
|
|
|
.. attribute:: Index.fields
|
|
|
|
|
2018-03-08 16:56:55 +01:00
|
|
|
A list or tuple of the name of the fields on which the index is desired.
|
2016-06-25 18:32:56 +02:00
|
|
|
|
2016-07-22 14:52:44 +02:00
|
|
|
By default, indexes are created with an ascending order for each column. To
|
|
|
|
define an index with a descending order for a column, add a hyphen before the
|
|
|
|
field's name.
|
|
|
|
|
|
|
|
For example ``Index(fields=['headline', '-pub_date'])`` would create SQL with
|
|
|
|
``(headline, pub_date DESC)``. Index ordering isn't supported on MySQL. In that
|
|
|
|
case, a descending index is created as a normal index.
|
|
|
|
|
2018-03-08 16:56:55 +01:00
|
|
|
.. versionchanged:: 2.1
|
|
|
|
|
|
|
|
Older versions don't accept a tuple.
|
|
|
|
|
2016-06-25 18:32:56 +02:00
|
|
|
``name``
|
|
|
|
--------
|
|
|
|
|
|
|
|
.. attribute:: Index.name
|
|
|
|
|
|
|
|
The name of the index. If ``name`` isn't provided Django will auto-generate a
|
|
|
|
name. For compatibility with different databases, index names cannot be longer
|
|
|
|
than 30 characters and shouldn't start with a number (0-9) or underscore (_).
|
2016-08-08 13:50:25 +02:00
|
|
|
|
2017-06-27 21:15:15 +02:00
|
|
|
``db_tablespace``
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
.. attribute:: Index.db_tablespace
|
|
|
|
|
|
|
|
The name of the :doc:`database tablespace </topics/db/tablespaces>` to use for
|
|
|
|
this index. For single field indexes, if ``db_tablespace`` isn't provided, the
|
|
|
|
index is created in the ``db_tablespace`` of the field.
|
|
|
|
|
|
|
|
If :attr:`.Field.db_tablespace` isn't specified (or if the index uses multiple
|
|
|
|
fields), the index is created in tablespace specified in the
|
|
|
|
:attr:`~django.db.models.Options.db_tablespace` option inside the model's
|
|
|
|
``class Meta``. If neither of those tablespaces are set, the index is created
|
|
|
|
in the same tablespace as the table.
|
|
|
|
|
2016-08-08 13:50:25 +02:00
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
For a list of PostgreSQL-specific indexes, see
|
|
|
|
:mod:`django.contrib.postgres.indexes`.
|