Перейти к содержимому
2 / 10

Как читать SQL, который сгенерировал ORM, и управлять загрузкой связей?

Первое правило работы с ORM — видеть итоговый SQL. Все популярные ORM умеют его печатать: логирование запросов в разработке, событие на выполнение запроса, счётчик запросов в тестах. Второе — понимать три стратегии загрузки связей. Ленивая: связь подгружается при обращении, отсюда классическая проблема N+1, когда цикл по ста заказам делает сто дополнительных запросов. Жадная через соединение (JOIN): один запрос, но при связи «один ко многим» строки родителя дублируются, и объём передаваемых данных растёт. Жадная отдельным запросом (IN (...)): два запроса вместо одного, зато без дублирования — обычно лучший выбор для коллекций. Третье — выбирать только нужные поля: SELECT * по таблице с большим JSONB или текстом стоит дорого, а ORM по умолчанию тянет всё. Тест, считающий число запросов, защищает от возврата N+1 после рефакторинга.

Как читать SQL, который сгенерировал ORM, и управлять загрузкой связей? | JScriptiser