Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Добрый день.

есть запрос

когда я пишу в where константу, вот так

select
.......
  WHERE contragentID = 100000
......

работает быстро
Если же сделать так

DECLARE @contragentID bigint
SET @contragentID = 100000

select
..... 
WHERE contragentID =  @contragentID
.......


Отчего такое может быть ? запрос сложный и тяжелый
12 ноя 15, 19:52    [18408661]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Забыл написать проблему - с параметром очень медленно :-)
12 ноя 15, 19:54    [18408681]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Glory
Member

Откуда:
Сообщений: 104751
vaskabww
Отчего такое может быть ? запрос сложный и тяжелый

Потому, что план выполнения для константы и для переменной - разный
12 ноя 15, 20:07    [18408761]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Glory,
И как сделать ? с переменной
12 ноя 15, 20:12    [18408795]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Glory
Member

Откуда:
Сообщений: 104751
vaskabww
Glory,
И как сделать ? с переменной

Сравнить планы и узнать, почему они разные
12 ноя 15, 20:27    [18408907]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Draginsv
Member

Откуда:
Сообщений: 457
а типы поля и параметра одинаковы?
12 ноя 15, 20:32    [18408947]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Draginsv,
Да, и там и там бигинт
12 ноя 15, 20:33    [18408955]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Grыzha
Member [заблокирован]

Откуда: вылезла
Сообщений: 3084
vaskabww
Добрый день.

есть запрос

когда я пишу в where константу, вот так

select
.......
  WHERE contragentID = 100000
......

работает быстро
Если же сделать так

DECLARE @contragentID bigint
SET @contragentID = 100000

select
..... 
WHERE contragentID =  @contragentID
.......


Отчего такое может быть ? запрос сложный и тяжелый


В конце запроса добавь OPTION( RECOMPILE)
моежешь на всякий случай статистику обновить
12 ноя 15, 20:44    [18409004]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Draginsv
Member

Откуда:
Сообщений: 457
надо перестраховаться полным контекстом where и индексами
12 ноя 15, 20:45    [18409006]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Grыzha,
Спасибо, попробую
12 ноя 15, 20:48    [18409031]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Grыzha,
Йоу, помогло ! Спасибо огромное !
12 ноя 15, 20:52    [18409053]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Glory
Member

Откуда:
Сообщений: 104751
Grыzha
В конце запроса добавь OPTION( RECOMPILE)
моежешь на всякий случай статистику обновить

Это не гарантирует, что для любого значения переменной производительность будет одинаковой
12 ноя 15, 20:55    [18409066]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Grыzha
Member [заблокирован]

Откуда: вылезла
Сообщений: 3084
Glory
Grыzha
В конце запроса добавь OPTION( RECOMPILE)
моежешь на всякий случай статистику обновить

Это не гарантирует, что для любого значения переменной производительность будет одинаковой


Ессно, тут роль играет и селективность конкретного значения в переменной
12 ноя 15, 20:57    [18409079]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Glory,
Да, я понимаю, cпасибо. Сейчас просто надо срочно сделать, а потом, когда время будет, покопаю. Еще раз всем спасибо большое !
12 ноя 15, 20:58    [18409083]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Grыzha,
Ага. Ну там примерно одинаково по всем контрагентам
12 ноя 15, 20:59    [18409092]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Glory
Member

Откуда:
Сообщений: 104751
Grыzha
Ессно, тут роль играет и селективность конкретного значения в переменной

Зачем тогда сразу пихать в запрос возможный костыль без выяснения причины ?
12 ноя 15, 21:00    [18409096]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Grыzha
Member [заблокирован]

Откуда: вылезла
Сообщений: 3084
Glory
Grыzha
Ессно, тут роль играет и селективность конкретного значения в переменной

Зачем тогда сразу пихать в запрос возможный костыль без выяснения причины ?


Ну старо ж как мир. Выполнил запрос с константой и план запроса попал в кэш. Выполняешь тот же запрос с переменной, джет тянет план из кэша, не разбираясь, что селективность по индексу стала плохой. Отсюда и тормоза.
12 ноя 15, 21:13    [18409138]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Grыzha,

Да нет, селективность примерно одинаковая для всех значений. При использовании констант - практически одинаковое время для всех contragentID (их там 14)
12 ноя 15, 21:30    [18409189]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
Схожие темы поднимаются на форуме с завидной регулярностью...
Примерно как "разница между табличными переменными и временными таблицами".

Почитайте:
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/
все подробно расписано.

Glory уже видимо устал прямо отвечать на подобного рода вопросы :)
13 ноя 15, 07:35    [18410096]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Pavel1211,
Спасибо, почитаю обязательно. Но непонятно почему с одними и теми же значениями констант и параметров с константами работает
быстро, с переменными - медленно
13 ноя 15, 10:51    [18410838]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
vaskabww
Но непонятно почему с одними и теми же значениями констант и параметров с константами работает
быстро, с переменными - медленно
Вот прочитайте предложенную статью и поймете.
13 ноя 15, 11:12    [18410966]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
vaskabww,

В двух словах - оптимизатор не знает значение переменной на момент компиляции и пользуется либо догадками, либо плотностью распределения значений в статистике.
Вот вам еще ссылка:http://sqlblog.com/blogs/ben_nevarez/archive/2009/09/11/how-the-query-optimizer-uses-statistics.aspx
Возможно, есть другие варианты при использовании переменных, но я о них не в курсе.
13 ноя 15, 12:22    [18411453]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Pavel1211,

Теперь понял. Спасибо большое за разъяснение и за ссылки!
13 ноя 15, 12:24    [18411473]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
А по поводу того, почему вам помог хинт recompile, Somewheresomehow хорошо написал: тут
13 ноя 15, 12:27    [18411498]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение запроса с параметром  [new]
vaskabww
Member

Откуда:
Сообщений: 68
Pavel1211,
Да, действительно, теперь понятно
13 ноя 15, 13:03    [18411719]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить