Object-Relational Mapping, объектно-реляционное отображение — технология программирования, которая позволяет связать базы данных с концепциями объектно-ориентированных языков программирования.
Недостатки ORM
1. ORM зачастую генерирует неоптимальные запросы или выполняет множество мелких запросов, когда можно обойтись одним-двумя. Чтобы исправить неоптимальный запрос или сократить количество запросов, нужно понимать, что делает автоматически сгенерированный запрос и какой запрос на «сыром» SQL будет оптимальным.
2. ORM-библиотека может вести себя неочевидно при выполнении запросов, а это затрудняет отладку приложения при возникновении «багов». При недостатке опыта работы с конкретной библиотекой поиск решения может занять много времени. При этом если посмотреть на запрос в форме SQL, то причина обычно становится понятна.
3. Некоторые сложные запросы гораздо проще написать на чистом SQL, чем правильно «сформулировать» через ORM. Иногда запросы, которые легко пишутся на SQL, довольно сложно написать через ORM.
4. Выполнение запросов через ORM происходит медленней, чем с использованием чистого SQL. Для высоконагруженных приложений это критично. ORM как прослойка между программным кодом и SQL-кодом неизбежно будет скрадывать ресурсы.
Преимущества SQL
1. Работать внутри БД — строить запросы на чтение или модификацию данных в базе. Зачастую это быстрее, чем писать код, который будет выполнен только один раз.
2. Писать скрипты — например, по выгрузке данных из БД для построения отчётов или по заполнению БД исходными данными во время локальной разработки.
3. Использовать продвинутые инструменты БД — хранимые процедуры, триггеры, пользовательские функции и другие. Возможность решить задачу не только на уровне языка программирования, но и на уровне БД существенно расширяет арсенал разработчика и позволяет подбирать наиболее эффективные инструменты в каждом конкретном случае.