Create composite index from a Django model
django, django-models, python
Solution
Starting from django-1.5 you can make compound index using `index_together` meta option: https://docs.djangoproject.com/en/dev/ref/models/options/#index-together
Note (2023/01/30) `index_together` is deprecated since django-4.2. Instead, use much more powerful `indexes` meta option. With it you can create not only compound indexes, but also other types of indexes, e.g. function-based indexes, partial (conditional) indexes, covering indexes: https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.indexes
So, in your example index declaration would like this
from django.db import models
class PopulationData(models.Model):
slot = models.IntegerField()
sample = models.IntegerField()
value = models.FloatField()
class Meta:
indexes = [
models.Index("slot", "sample", name="population_slot_sample_idx")
]
Problem
I have the following model: ``` from django.db import models class PopulationData(models.Model): slot = models.IntegerField(db_index=True) sample = models.IntegerField() value = models.FloatField() class Meta: unique_together = (('slot', 'sample'),) ``` And I would like to create also a compound index on the column pair that have the `UNIQUE` constraint, like so: ``` CREATE INDEX my_compound_index ON myapp_populationdata (slot, sample); ``` Right now I have a separate code connected to the `post_syncdb` signal that issues the previous SQL statement. Is there any way to indicate it from the model specification? (Note: I'm using the 1.3 branch).