Как оптимизировать многоколоночную индексацию в Django с помощью PostgreSQL

В моем приложении есть такая модель:

class ObservedData(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    unique_id = models.CharField(max_length=128)
    timestamp = models.DateTimeField()
    value = models.FloatField(null=True)

90% моих запросов

select * from ObservedData where user=<user> AND unique_id=<uid> AND timestamp BETWEEN <date1> AND <date2>

Вот как я индексирую:

class Meta:
    indexes = [
        models.Index(fields=['user', 'unique_id', 'timestamp']),
        models.Index(fields=['user', 'unique_id']),
        models.Index(fields=['unique_id', 'timestamp']),
    ]
    unique_together = ('user', 'unique_id', 'timestamp')

Является ли это правильным способом? Я заметил повышенный рост выделенного пространства базы данных и хотел бы узнать, не является ли это перегрузкой или ненужным перекрытием индексов.

Вернуться на верх