Насколько большой профит в SQL от запроса двух полей вместо всех?

Допустим в таблице users есть поля username, email, first_name, last_name. Нужно получить данные username и email.

Если вызвать только эти поля и, соответственно, если вызвать все поля и взять только необходимые.


Ответы (1 шт):

Автор решения: CrazyElf

Всё зависит от масштабов процесса. Если это какая-то задача, которая запрашивает данные 100 пользователей раз в сутки, то разницы для вас не будет. А вот если это высоконагруженный сервис, пользователей миллион (или миллиард) и у вас на счету каждый байт, переданный по сети, и каждая миллисекунда работы сервиса, то эффект будет заметный.

Даже если не рассматривать оптимальность самого запрос к БД, там могут быть разные варианты в плане эффективности, а рассматривать только звено БД -> бэкенд, то, по грубой прикидке, если вы получаете все поля, а не только необходимые, то вы удваиваете нагрузку на канал между БД и бэкэндом и создаёте лишнюю работу на стороне и БД и бэкенда. Ведь эти данные нужно:

  • сериализовать на стороне БД
  • передать по сети от БД к бэкенду
  • десериализовать в бэкенде

В два раза больше передаваемых полей -> в два раза больше такой работы.

Но всегда при этом нужно смотреть по бизнес-задаче и по условиям в целом. Если эта лишняя нагрузка для вас не существенна, то можно не заморачиваться, забирать всегда все поля из таблицы, брать потом только нужные из них, у вас будет меньше лишнего кода в обвязке БД, сопровождать этот проект будет проще.

Но если это критичный по ресурсам проект, то вам придётся под каждый запрос делать какие-то оптимизации. Вплоть до того, что под каждую задачу делать отдельный маппинг со своими запросами к БД.

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

→ Ссылка