Вопрос проверяет умение осознанно отказаться от ORM в пользу более низкоуровневого и контролируемого решения.
Сырые SQL-запросы стоит использовать, когда ORM становится ограничением. Это актуально для сложных JOIN-ов и аналитических запросов. Также SQL нужен при оптимизации производительности. Он позволяет использовать специфические возможности базы данных. Важно применять его аккуратно и безопасно.
Хотя ORM сильно упрощает работу с базой данных, существуют ситуации, когда его использование становится неэффективным.
Перед переходом на SQL важно понимать, какую проблему вы решаете.
ORM плохо справляется с:
многоуровневыми JOIN-ами
подзапросами
оконными функциями
SELECT user_id, COUNT(*) OVER (PARTITION BY user_id)
FROM orders;
Такие запросы:
проще читать на SQL
легче оптимизировать
понятнее анализировать
SQL позволяет:
точно управлять индексами
использовать EXPLAIN
писать более эффективные запросы
ORM может генерировать избыточные запросы без вашего ведома.
Некоторые возможности:
CTE
JSON-функции
оконные функции
специфические типы данных
Часто либо плохо поддерживаются ORM, либо не поддерживаются вообще.
При:
bulk insert
batch update
аналитических отчетах
сырой SQL обычно быстрее и понятнее.
При работе с SQL важно:
использовать параметризацию
избегать SQL-инъекций
покрывать код тестами
Сырые SQL-запросы стоит использовать там, где важны контроль и производительность, но не превращать их в основной стиль работы без необходимости.