Приветствую!
- - -
У меня есть модель:
class Task(BaseModel):
settings = JSONField(default=dict, blank=True)
priority = models.IntegerField(default=0)
status = models.CharField(default='new', max_length=50) # статус выполнения задачи (new / in_work / success / ERROR)
status_data = JSONField(default=dict, blank=True)
status_date = models.DateTimeField(default=get_datetime_now) # дата последнего обновления статуса
is_on = models.BooleanField(default=True)
Я часто делаю к ней примерно такие запросы:
Task.objects.filter(is_on=True, status='new').order_by('priority')
- - -
В таблице 7 млн записей.
С ростом таблицы запросы работают всё медленнее.
- - -
Вопросы:
1) Я правильно понимаю, что для ускорения необходимо добавить db_index=True, в поля по которым я часто делаю фильтрацию?
2) Есть ли смысл добавлять db_index в BooleanField? Поле
is_on в моём случае.
3) Есть ли смысл добавлять db_index в поле по которому я делаю сортировку? Поле
priority в моём случае.
4) Какой общий принцип уместности добавления индекса в поле?
5) Какие ещё методы ускорения применимы в моём случае?
- - -
Спасибо!