Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Оптимизация запроса (число прочтений - 1700 )
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Оптимизация запроса
29. Мая 2007 :: 08:07
Печать  
Вопрос:
На SQL сервере есть табличная функция, ей передаются параметры
если в запросе используются эти параметры то запрос выполняется минуту! Если в запросе поменять переменные на строковые константы запрос выполняется 10 сек! Как с эти бороться?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса
Ответ #1 - 29. Мая 2007 :: 08:22
Печать  
Цитата:
Все очень просто
Значение констаны известно оптимизатору ДО выполнения запроса. Поэтому он строит более оптимальный план.
Значение же переменной неизвестно на момент создания плана выполнения запроса. Поэтому оптимизатор строит план выполнения из расчета, что это значение может быть любым.
(c) Glory

Варианты решения:
  • with recompile
  • динамический sql
  • хинты, фиксирующие желаемый план выполнения  Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Оптимизация запроса
Ответ #2 - 29. Мая 2007 :: 10:15
Печать  
berezdetsky писал(а) 29. Мая 2007 :: 08:22:
Цитата:
Все очень просто
Значение констаны известно оптимизатору ДО выполнения запроса. Поэтому он строит более оптимальный план.
Значение же переменной неизвестно на момент создания плана выполнения запроса. Поэтому оптимизатор строит план выполнения из расчета, что это значение может быть любым.
(c) Glory

Варианты решения:
  • with recompile
  • динамический sql
  • хинты, фиксирующие желаемый план выполнения  Улыбка


динамический SQL - в смысле собрать тектс запроса, а потом выполнить через EXEC? Если так то как это применимо к табличной функции?

with recompile - это в каком месте, куда? ткните хоть пальцем где почитать, то же про план выполнения Печаль
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса
Ответ #3 - 29. Мая 2007 :: 10:54
Печать  
Если табличная функция это обязательное условие, тогда остаются только хинты. With recompile определено для процедур.

Описание хинтов:
BOL -> Указатель -> hints

Планы выполнения можно увидеть в профайлере: шаблон SQLProfilerTSQL_SPs плюс событие Performance\Execution Plan.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать