Любовь Абашина
Любовь Абашина | Репутация: 102 (Кандидат) 22 апреля 2009 в 09:40
Расскажите о назначении и преимуществах хранимых процедур.
Герман Половников
Герман Половников | Репутация: 128 (Кандидат) 22 апреля 2009 в 10:15

Назначение - выполнение программного кода. А преимущества:
1. Скорость выполнения.
2. Для внесения изменений не надо разбирать специфичный код приложения (которого часто даже и нет).

Анатолий Захаров
Анатолий Захаров | Репутация: 277 (Кандидат) 22 апреля 2009 в 14:38

Хранимые процедуры могут значительно увеличить производительность доступа к данным при самых минимальных затратах. Когда Вы помещаете SQL-запросы в процедуры, а не создаете их динамически на страницах, SQL сервер после первого их исполнения кэширует процедуру и план ее исполнения (Execution Plan). Последующие запросы к такой кэшированной процедуре получают необходимые данные из кэша SQL сервера, что и приводит к значительному увеличению производительности
Еще одно важное преимущество, которые Вы получаете при использовании процедур, - это то, что между данными в SQL-сервере и Вашим приложением возникает некий промежуточный уровень, который отделяет данные от кода приложения. Например, структура данных (в хорошо продуманных базах) меняется достаточно редко, но если это все же необходимо сделать, то при использовании процедур Вам нет необходимости переписывать код Вашего приложения. Достаточно лишь изменить процедуры, т.к. приложение не обращается напрямую к SQL серверу, а получает все необходимые данные от процедур.
Хранимые процедуры реально снижают сетевой трафик, т.к. инкапсулируют пакеты SQL-запросов и могут брать на себя предварительную обработку данных, в отличие от динамических запросов ASP, где SQL вынужден передавать результирующие данные после каждого отдельного запроса. Например, Вы хотите посмотреть список счетов определенного клиента и затем отредактировать только те счета, дата которых удовлетворяет некому условию. При использовании обычных запросов SQL сервер будет посылать ответы клиенту (Вам) после обработки каждого, а при использовании хранимой процедуры Вы можете послать аргументы только один раз и после получить уже конечные данные, обработка всего пакета запросов будет сделана самой процедурой, что и приведет к снижению трафика и увеличению общей производительности.