Это зависит от того, что вы подразумеваете под «эффективным».
- Время выполнения - если вы сохраняете в базу данных только каждые пару секунд, тогда любая разница в скорости между SP и INSERT наиболеескорее всего незначительный.Если громкость особенно высока, вы, вероятно, настроите что-то вроде очереди команд на сервере перед тонкой настройкой на этом уровне.
- Время разработки
- с использованием INSERT означает, что вы можете написать свой SQL напрямуюв вашей кодовой базе (в репозитории или подобном).Я видел, что это описывается как плохой дизайн, но я думаю, что, если у вас есть интеграционные тесты вокруг запроса, нет реальной проблемы
- Хранимые процедуры могут быть более сложными в обслуживании - вам нужен план дляразвернуть новый SP в базе данных.Преимущества состоят в том, что вы можете реализовать более детальную защиту в самой базе данных (как сказали @ b-rain и @mark_s), и легко выбирать между INSERT и UPDATE в SP, тогда как делать то же самое в коде означает сделать определенныепредположения.
Лично (на данный момент) я использую встроенный SQL для запросов и удаления, а также хранимые процедуры для вставки.У меня есть сценарий и набор файлов миграции, которые я могу запустить с производственной базой данных для развертывания изменений таблицы и SP, что, кажется, работает довольно хорошо.У меня также есть интеграционные тесты вокруг встроенного SQL и вызовов SP.Если вы используете встроенный SQL, вам определенно следует использовать параметризованные запросы, это помогает против атак с использованием SQL-инъекций, а также легче для чтения и программирования.