Делает ограничение запроса к одной записи, улучшают производительность

Вы можете установить symmetrical=False для отношения, а затем попытаться использовать атрибут related_name.

class User(AbstractUser):
      block_users_list = models.ManyToManyField("self", blank=True, symmetrical=False, related_name='blocked_by_users')

Теперь у вас есть два способа доступа к отношениям:

user = User.objects.get(id=1)
user.block_users_list.all() # Will return the list of users blocked by user
user.blocked_by_users.all() # Will return the list of users who have blocked the current user
30
задан Re0sless 29 August 2008 в 15:48
поделиться

2 ответа

Да, Вы заметите различие в производительности при контакте с данными. Одна запись занимает меньше места, чем несколько записей. Если Вы не имеете дело со многими строками, это не было бы большой частью различия, но после того как Вы выполняете запрос, данные должны быть отображены назад Вам, который является дорогостоящим, или имел дело с программно. Так или иначе одна запись легче, чем несколько.

0
ответ дан 28 November 2019 в 00:02
поделиться

Если у Вас есть немного более сложный запрос с одним или несколькими соединениями, ПРЕДЕЛЬНЫЙ пункт дает оптимизатору дополнительную информацию. Если это ожидает соответствовать двум таблицам и возвращать все строки, хэширование обычно оптимально. Хэширование является типом соединения, оптимизированного для большого объема соответствия.

Теперь, если оптимизатор знает о передаче ПРЕДЕЛА 1 он знает, что он не будет обрабатывать большие объемы данных. Это может вернуться к соединению цикла.

На основе базы данных (и даже версия базы данных) это может оказать огромное влияние на производительность.

4
ответ дан 28 November 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: