Что является более эффективным в Django? Двойной фильтр или союз - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть модель 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...