У меня есть модель django, которая содержит информацию о каждых двух профилях:
class Match(models.Model):
account1 = models.ForeignKey(Profile,
related_name="match1",
on_delete=models.CASCADE)
account2 = models.ForeignKey(Profile,
related_name="match2",
on_delete=models.CASCADE)
viable = models.BooleanField(default=False)
Учитывая профиль, p, я хочу иметь возможность получить все совпадения, для которых p является account1 или account2. Я мог бы сделать это, используя фильтр, или я мог бы сделать объединение p.match1 и p.match2.
Очевидным недостатком второго подхода является необходимость применения всех других фильтров к двум наборам запросов до объединения, но кроме этого мне было интересно, есть ли большая разница в эффективности этих двух операций. В настоящее время с n профилями количество записей соответствия равно O (n ^ 2), поэтому я считаю, что фильтрация должна быть O (n ^ 2). На самом деле вопрос заключается в том, позволяет ли реализация обратных ключей (вычисление p.match1 и p.match2) иметь значение O (n) и, следовательно, стоит ли использовать его поверх базовой фильтрации c.