Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
немогу понять в чем разница между запросом вида
select * from BaseLineError with (nolock)
where begintime between '2016-08-10 00:00:00.000' and '2016-08-10 00:14:59.000'

и

DECLARE @DateTimeBegin datetime;
DECLARE @DateTimeEnd datetime;

set @DateTimeBegin = '2016-08-11 00:00:00.000'
set @DateTimeEnd = '2016-08-11 00:15:00.000'

select * from BaseLineError with (nolock)
where begintime between @DateTimeBegin and @DateTimeEnd


BaseLineError таблица большая > 10000000 и нагруженная транзакшн локами.
в первом случае запрос возвращается практически мгновенно . а во втором случае видно как сначала нагружаетса хард диск. чтото кэшируетса потом хард диск прекращает и за работу принимается процессор. и наконец результат.
по логике вещей все должно работать одинаково быстро.
спасибо.
16 авг 16, 02:11    [19545016]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
дополню - сервер 2008
подозреваю что из за того что в первом случае используются константы то тут статистика включается в дело. а во втором случае такой халявы нет и бежит он родненький по всей гиганской таблице.
16 авг 16, 02:28    [19545032]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
используя структуру вида <= разницы нет.
16 авг 16, 02:34    [19545034]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
прикрепил execution plan для первого случая.

К сообщению приложен файл. Размер - 33Kb
16 авг 16, 02:44    [19545040]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
прикрепил execution plan для 2го случая.

К сообщению приложен файл. Размер - 42Kb
16 авг 16, 02:45    [19545041]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Это из-за параметров. Такое на больших таблицах часто случается. Помогает update statistics. Сравните планы двух запросов, посмотрите какой индекс используется.
Есть ещё простой вариант - сделать второй запрос в динамике.
16 авг 16, 02:45    [19545042]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
Сон Веры Павловны
Member

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

Медленно в приложении, быстро в SSMS - этот случай там рассматривается
16 авг 16, 03:21    [19545060]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
aleks2
Guest
3unknown
Это из-за параметров. Такое на больших таблицах часто случается. Помогает update statistics. Сравните планы двух запросов, посмотрите какой индекс используется.
Есть ещё простой вариант - сделать второй запрос в динамике.


Для любителей совать динамику в каждую дырку давно сделали option(recompile).
16 авг 16, 08:00    [19545170]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
982183
Member

Откуда: VL
Сообщений: 3357
А результат получается одинаковый?
16 авг 16, 08:19    [19545198]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
всем спасибо за ответы. я переписал запрос под динамику.
но блин . это не красиво. я не понимаю зачем майкрософт такое сделал.
16 авг 16, 21:01    [19549664]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
сделали option(recompile)
экспериментирую сейчас
16 авг 16, 21:18    [19549732]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
well_valentin
я не понимаю зачем майкрософт такое сделал.
Зачем не делает безусловную перекомпиляцию кода без опции option(recompile)?
Что бы работало быстро, очевидно же.
Для 99.999% выполнений запросов прекрасно подойдёт старый план.
А безусловная перекомпиляция замедлит работу сервера в сотни раз.
16 авг 16, 22:12    [19549967]     Ответить | Цитировать Сообщить модератору
 Re: в чем разница между begintime  [new]
well_valentin
Member

Откуда: Vancouver
Сообщений: 14
option(recompile)
я не точно выразился .
тема закрыта .
всем спасибо за помощь.
16 авг 16, 22:15    [19549975]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить