Перейдите к следующему слайду, нажав кнопку Вправо
Подготовлено онлайн-курсом
| id поста | Заголовок поста | Текст поста |
|---|---|---|
| 1 | Как заработать деньги | Нужно много работать... |
| 2 | Я заработал много денег | Я просто много работал!.. |
| 3 | Как поверить в себя | Работайте над собой... |
| 4 | Нужна-ли работа? | Определённо нужна... |
SQL не может вернуть из БД сразу много лайков для одного поста, поэтому он дублирует каждый пост по количеству лайков.
| id поста | Заголовок поста | Текст поста | Лайк |
|---|---|---|---|
| 1 | Как заработать деньги | Нужно много работать... | user id14 |
| 1 | Как заработать деньги | Нужно много работать... | user id45 |
| 1 | Как заработать деньги | Нужно много работать... | user id67 |
| 1 | Как заработать деньги | Нужно много работать... | user id645 |
| ... | ... | ... | ... |
| 2 | Я заработал много денег | Я просто много работал!.. | user id24 |
| ... | ... | ... | ... |
Вызов Count сворачивает эту структуру, оставляя от колонки с лайками только числа — количество лайков. Но промежуточная структура данных всё же создается внутри БД и поглощает море вычислительных ресурсов.
Два annotate порождают неимоверное количество записей для каждого поста: количество лайков умножается на количество комментариев. Это очень ресурсоёмко.
Подсчёт количества лайков вернет неверное число, если забыть добавить distinct=True. Оба annotate вернут число равное количеству лайков умноженному на количество комментариев.
| id поста | Заголовок поста | Текст поста | Лайк | Комментарий |
|---|---|---|---|---|
| 1 | Как заработать деньги | Нужно много работать... | user id14 | автор id14 |
| 1 | Как заработать деньги | Нужно много работать... | user id14 | автор id89 |
| 1 | Как заработать деньги | Нужно много работать... | user id14 | автор id53 |
| ... | ... | ... | ... | |
| 1 | Как заработать деньги | Нужно много работать... | user id45 | автор id831 |
| 1 | Как заработать деньги | Нужно много работать... | user id45 | автор id39 |
| ... | ... | ... | ... |