Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Что работает быстрее?


Автор: Pankon 23.7.2007, 22:56
Что работает быстрее? 
Stored procedure или View для запроса с Join ....

Автор: Oberon83 25.7.2007, 08:11
Stored procedure быстрее, поскольку при первом выполнений сервер компилирует хранимку для ускорения запуска.
Но со Stored procedure нельзя работать как с View, смотри сам как тебе удобнее.

Автор: ivashkanet 28.7.2007, 17:56
Oberon83, а что мешает SQL серверу скомпилить и сохранить View при первом вызове?
Или у тебя есть проверенная информация, что View не хранится скомпилированном виде?

Автор: SergeBS 1.8.2007, 08:18
View - это та  же хранимка, только хранится всегда на сервере. Делаем выводы smile

Автор: ne_ass 2.8.2007, 15:37
а разве представление ето хранимая проц, а не динамический запрос???

Автор: ivashkanet 2.8.2007, 16:02
Цитата(ne_ass @  2.8.2007,  15:37 Найти цитируемый пост)
а разве представление ето хранимая проц, а не динамический запрос??? 

Переведи.

Насколько я понимаю вопрос в том. Что будет быстрее
1) 
Код
select * from MyView

2) Либо вызвать хранимку и получить от неё тот же ответ.

Автор: ne_ass 2.8.2007, 16:38
"View - это та  же хранимка, только хранится всегда на сервере. Делаем выводы "

вопрос в том, что ето на самом деле, я все время пологал что ето динамический запрос?

И кстати что быстрее select или Stored  Proc  c select??

Автор: SergKO 4.8.2007, 08:47
Представление - это виртуальная таблица, т.е. в любом случае Вы вынуждены формировать текст запроса к ней либо в той-же процедуре, либо на клиенте. В последнем случае возможны варианты:
1. Выборку по всему представлению 
Код

select * from MyView 
Вы навряд ли будете делать. У запроса будут условия. Когда Вы посылаете из клиента запрос и изменяете условия, то этот запрос будет каждый раз заново компилироваться, для него будет строиться план, запрос с новыми условиями будет помещаться в кэш и т.д и т.п. Т.е. при выполнении 
Код

select * from MyView where 'изменяющиеся условия'

накладные расходы будут больше, чем при обращении к хранимой процедуре. И еще возможность SQL Injection, т.е. атаки, при которой опасный код передается в SQL server. Например
Код

select * from MyView; TRUNCATE TABLE MyTable;
 Любое приложение, создающее и посылающее SQL-инструкции надо обязательно рассматривать на предмет безопасности к вставке потенциально опасного кода. Т.к. "SQL Server выполняет все получаемые синтаксически правильные запросы".
2. Другой вариант - параметризованный запрос (в профайлере его увидите как execute sp_executesql 'текст запроса спараметрами', параметры). Он откомпилируется один раз, разместиться в кэше и будет использоваться при последующих вызовах (как и процедура).

Т.е. можно добиться примерно одинаковой скорости выполнения.

Как мне кажется,  в данном случае не стоит сравнивать скорости. При сравнении процедур и запросов, формируемых на клиенте, надо рассматривать другие вопросы. Использование хранимых процедур дает дополнительную защищенность БД, придает дополнительную гибкость, т.к. при изменении бизнес-логики достаточно изменить текст процедуры, не изменяя клиентское приложение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)