Django: Граф аннотаций M2M работает медленно
Когда я запускаю Count с аннотацией от объекта, с которым связан m2m, как показано ниже. Это происходит медленно по какой-то причине.
К одной и той же таблице обращаются дважды, и второй запрос занимает много времени. Что может быть причиной этого и как я могу это исправить?
Кроме того, я хочу сделать order_by на этом count
, но выполнение order_by делает скорость еще хуже.
# models.py
class Tag(models.Model):
name = models.CharField(unique=True, max_length=100)
is_actress = models.BooleanField(default=False)
class Video(models.Model):
tags = models.ManyToManyField(Tag, blank=True, db_index=True)
# This is slow.
Tag.objects.annotate(count=Count("video"))
Причина, по которой такой запрос создавался и замедлялся, заключалась в том, что использовалась пагинация DRF по умолчанию, и .count() выполнялся - вот причина.