Нужно ли делать два запроса для получения статьи и комментариев к ней, или можно обойтись одним?

Какова оптимальная стратегия для извлечения текста поста и всех комментариев к нему из таблиц <code>posts</code> и <code>comments</code> по идентификатору поста? Использование LEFT JOIN позволяет выполнить это всего одним запросом, но может привести к избыточности данных. Какой подход будет более эффективным с точки зрения производительности базы данных и оптимизации памяти: использовать один объединенный запрос или написать два отдельных запроса?
  • 25 июня 2024 г. 5:31
Ответы на вопрос 2
Для получения статьи и всех комментариев к ней можно обойтись одним запросом, используя LEFT JOIN. Однако, это может привести к избыточности данных, так как при использовании LEFT JOIN будут возвращены все записи из таблицы comments, даже если у них нет связи с записью из таблицы posts.

Для оптимальной стратегии извлечения текста поста и всех комментариев к нему, более эффективным с точки зрения производительности базы данных и оптимизации памяти будет использование двух отдельных запросов. 

Первый запрос будет извлекать текст поста из таблицы posts по его идентификатору. А второй запрос будет извлекать все комментарии к данному посту из таблицы comments, также по идентификатору поста. Такой подход позволит избежать избыточности данных, улучшит производительность базы данных и оптимизирует использование памяти.
Вопрос лежит в плоскости оптимизации. 
Если вам приемлемо по количеству обращений и времени делать несколько отдельных запросов, чтобы сформировать объект поста на бэкенде перед СУБД, то делайте. Если нужно уменьшить количество запросов, но пожертвовать объемом пересылаемых данных между бэком и СУБД, то какие-то атрибуты поста, которые идут списком/массивом можно получать одним запросом.
Обычно, дилемма состоит в том, как получать необъемные скалярные свойства поста - id, дата публикации, автор и т.д. и не сильно глубоких списков, скажем, изображения галереи поста, которые редко превышает пару десятков штук. Вот это можно спокойно джойнить, и не бояться дублирования свойств поста в выборке.
Если вы работаете с длинным текстом поста, и безразмерными списками, то тут нужны отдельные запросы. Скорее всего в комментариях у вас будет порционная подгрузка по страницам, или по кустам дерева комментариев, если оно многоуровневое.
Похожие вопросы