Оптимизация хранимых процедур в MS SQL Server 2000/2005

IT-компании
Некоторое время назад я писал о случаях низкой производительности хранимых процедур: razbezhkin.habrahabr.ru/blog/24231.html

Описываю, как с этим можно боротся.

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

Решается эта проблема очень просто: если возможно предсказать зависимость количества строк в выборке от входных параметров, например в таком запросе: SELECT * FROM Tab1 WHERE x<@param1
то решение быдет следующем:
Делаете две копии хранимой процедуры, называете их разными именами но программный код у них один и тот же. Пишете третью хранимую процедуру которая в зависимости от велечины параметра вызывает либо одну либо другую процедуру.

Это приводит к тому, что каждая из двух процедур будет оптимизирована и скомпилирована по свое количество возвращаемых строк: первая для малого, а вторая для большого.
Теги:sqlstored procedureperformanceпроизводительностьоптимиза
Хабы: IT-компании
+1
1,2k 1
Комментировать

Похожие публикации

Лучшие публикации за сутки