Влияет ли размер хранимой процедуры на производительность ее выполнения? - PullRequest
2 голосов
/ 04 мая 2009

Влияет ли размер хранимой процедуры на производительность ее выполнения?

Лучше ли иметь большой SP, который выполняет весь процесс, или разделить его на несколько SP, что касается производительности?

Ответы [ 4 ]

3 голосов
/ 04 мая 2009

Позвольте мне перефразировать: «Влияет ли размер моей функции на производительность ее выполнения?»

Очевидный ответ: Нет. Функция будет работать настолько быстро, насколько это возможно на оборудовании, на котором она работает. (Для ясности: более длинная функция, конечно, будет работать дольше . Но она не будет работать медленнее . Поэтому производительность не зависит.)

Вопрос right : «Влияет ли способ, которым я пишу свою функцию, на производительность ее выполнения?»

Ответ: да, конечно.

Если вы на самом деле задаете второй вопрос, вам следует добавить пример кода и быть более конкретным.

2 голосов
/ 04 мая 2009

Нет, не совсем - или немного, во всяком случае. Stored Proc предварительно скомпилирован на сервере - и он не пересылается между сервером и клиентом - поэтому его размер на самом деле не так уж важен

Более важно настроить его в удобном для восприятия виде.

Марк

0 голосов
/ 04 мая 2009

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

У нас возникают ситуации, когда очищенная хранимая процедура необходима снова и должна быть перекомпилирована. При запросе представления, обращающегося к сотням таблиц разделов, это может быть дорогостоящим и вызвало тайм-ауты в нашем производстве. Объединение в два из восьми решило эту проблему.

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

Другие ответы, которые в основном "это зависит", от мертвых. Независимо от того, насколько быстро у вас есть БД, плохой запрос поставит ее на колени. И каждая ситуация уникальна. В большинстве мест кодирование модульным и легко понятным способом более эффективно и дешевле в обслуживании. SQL-сервер должен «понять» это, поскольку он строит планы запросов.

0 голосов
/ 04 мая 2009

Не уверен, что вы подразумеваете под РАЗМЕРом хранимой процедуры (строк кода ?, сложность? Количество таблиц? Количество объединений?), Но производительность выполнения полностью зависит от плана выполнения определенного и скомпилированного SQL в пределах хранимая процедура. Это можно очень хорошо контролировать через SQL Profiler, если вы используете SQL Server. Производительность в наибольшей степени ограничивается такими вещами, как объединения и сканирование таблиц, и хороший инструмент может помочь вам определить, где размещать индексы, или подумать о лучших способах определения SQL. Надеюсь, это поможет.

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