вставить напрямую или через хранимую процедуру - PullRequest
1 голос
/ 17 марта 2011

Я использую sql server и winforms для моего приложения. данные будут вставляться каждую минуту в таблицы базы данных нажатием кнопки в форме.

для этого я использую запрос INSERT.

Но если я создам процедуру и включу в нее тот же запрос вставки, то будет ли она более эффективной, в чем тогда будет разница?

Ответы [ 4 ]

3 голосов
/ 17 марта 2011

Хранимая процедура, как правило, будет быстрее, поскольку план запроса сохраняется, и его не нужно создавать для каждого вызова. Если это простая вставка, разница будет минимальной.

Хранимая процедура может быть запущена с разрешениями на выполнение, которые более безопасны, чем предоставление пользователю разрешений на вставку.

3 голосов
/ 17 марта 2011

Использование хранимых процедур более безопасно

2 голосов
/ 17 марта 2011

Это зависит от того, что вы подразумеваете под «эффективным».

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

Лично (на данный момент) я использую встроенный SQL для запросов и удаления, а также хранимые процедуры для вставки.У меня есть сценарий и набор файлов миграции, которые я могу запустить с производственной базой данных для развертывания изменений таблицы и SP, что, кажется, работает довольно хорошо.У меня также есть интеграционные тесты вокруг встроенного SQL и вызовов SP.Если вы используете встроенный SQL, вам определенно следует использовать параметризованные запросы, это помогает против атак с использованием SQL-инъекций, а также легче для чтения и программирования.

1 голос
/ 23 марта 2011

Если ваш администратор базы данных даже позволяет вам делать это без хранимой процедуры, я был бы очень подозрительным ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...