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

Откуда: Київ
Сообщений: 5154
IF (@recovered = 1)
BEGIN
UPDATE Table SET recovered = @recovered WHERE id = @id 
END


vs

UPDATE Table SET recovered = @recovered WHERE id = @id AND @recovered = 1


какой лучше?
8 дек 16, 17:09    [19981433]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
AmKad
Member

Откуда:
Сообщений: 5308
winsky!,

Второй вариант всегда запустить SQL-запрос, даже если он не нужен.
8 дек 16, 17:12    [19981447]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
AmKad
Member

Откуда:
Сообщений: 5308
AmKad
winsky!,

Второй вариант всегда запустить SQL-запрос, даже если он не нужен.
8 дек 16, 17:15    [19981467]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
winsky!,

без разницы, что там фантзиурет AmKad не ясно
8 дек 16, 17:17    [19981477]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
winsky!
Member

Откуда: Київ
Сообщений: 5154
я помню, очень давно, были разгворы, что иф не очень хорошо использовать с точки зрения компиляции, можете меня ткнуть в статью/обсуждение? если, конечно, это я себе не придумал
8 дек 16, 17:22    [19981504]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
AmKad
Member

Откуда:
Сообщений: 5308
TaPaK
winsky!,

без разницы, что там фантзиурет AmKad не ясно
Ну-ну.

P.S. Затаил на меня обиду за вчерашнее 19977102?
8 дек 16, 17:23    [19981507]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
winsky!
я помню, очень давно, были разгворы, что иф не очень хорошо использовать с точки зрения компиляции, можете меня ткнуть в статью/обсуждение? если, конечно, это я себе не придумал

все IF будут сидеть в скомпилированном плане процедуры
8 дек 16, 17:23    [19981509]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
winsky!
Member

Откуда: Київ
Сообщений: 5154
+ планы отличаются
8 дек 16, 17:26    [19981519]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
winsky!
Member

Откуда: Київ
Сообщений: 5154
winsky!
я помню, очень давно, были разгворы, что иф не очень хорошо использовать с точки зрения компиляции, можете меня ткнуть в статью/обсуждение? если, конечно, это я себе не придумал

забыл сказать, что все это в хранимой процедуре
8 дек 16, 17:27    [19981522]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
winsky!
winsky!
я помню, очень давно, были разгворы, что иф не очень хорошо использовать с точки зрения компиляции, можете меня ткнуть в статью/обсуждение? если, конечно, это я себе не придумал

забыл сказать, что все это в хранимой процедуре

у процедуры план кэшируется один включая все IF, из минусов это если план используется повторно(нет перекомпиляции), ресурсов может запрашивать не столько сколько если бы попадало в конкретную ветку. Если как параметр в предикат, то тут минус опять же parameter sniffing, что побеждается перекомпиляцией :) так что если вы не собираетесь делить на 2 процедуры(грубо говоря), то разницы нет
8 дек 16, 17:34    [19981538]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
Владислав Колосов
Member

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

да что там перекомпилировать, дропать кэш каждый час и вся недолга.
Серверу же все равно нечем больше заняться.
8 дек 16, 18:03    [19981638]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Владислав Колосов,

я бы перезагружал
8 дек 16, 18:04    [19981640]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
winsky!
какой лучше?
В данном конкретном случае без разницы.
Можете считать, что для второго случая IF встроен в план выполнения - там будет Filter с Startup Expression Predicate, т.е. если @recovered <> 1 таблица читаться не будет.
8 дек 16, 18:04    [19981641]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
winsky!
Member

Откуда: Київ
Сообщений: 5154
invm
winsky!
какой лучше?
В данном конкретном случае без разницы.
Можете считать, что для второго случая IF встроен в план выполнения - там будет Filter с Startup Expression Predicate, т.е. если @recovered <> 1 таблица читаться не будет.

я понял, спасибо.
а в каком случае не без разницы?
8 дек 16, 18:10    [19981660]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
winsky!
а в каком случае не без разницы?
Например,
- Когда в блоке IF много инструкций - так проще.
- Когда предикат в IF основан на чтении таблиц.
8 дек 16, 18:24    [19981706]     Ответить | Цитировать Сообщить модератору
 Re: IF vs WHERE  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
В случае невыполнения условия IF триггер таблицы (если есть) не будет запускаться.
В случае WHERE - будет запускаться всегда.
8 дек 16, 18:39    [19981759]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить