Я думаю, что вы затронули важный момент: оптимизированный вручную SQL без дополнительного уровня абстракции может быть быстрее. Тем не менее, это приходит по цене.
Вероятно, возникнет вопрос: перевешивает ли преимущество дополнительной скорости преимущество уровня доступа к базе данных, например инкапсуляция специфических знаний SQL, чтобы инженеры могли сосредоточиться на бизнес-логике (уровень домена).
В большинстве случаев вы, вероятно, обнаружите, что производительность уровня абстракции базы данных будет достаточно хорошей, если реализация была выполнена экспертом в этом вопросе. Если все сделано правильно, двойного буфера / циклов можно избежать в значительной степени.
Я подозреваю, что существует лишь небольшая доля приложений (я думаю, не более 20%), где производительность настолько критична, что уровень абстракции не подходит.
Но возможно и гибридное решение: используйте уровень абстракции для 80% модулей, где гибкость и удобство превосходят скорость, и напрямую обращайтесь к базе данных в 20% модулей, где скорость критична.
Я, вероятно, проголосовал бы за уровень абстракции и затем оптимизировал бы производительность там, где это необходимо (что может быть достигнуто с помощью средств, отличных от непосредственного общения с базой данных).