powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Производительность?
9 сообщений из 9, страница 1 из 1
Производительность?
    #32010665
AlexIgnat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!!!
Недавно услышал, что IF...ELSE конструкция работает намного медленнее, чем case.
Может кто-нибудь ставил эксперименты на этом поприще. И если это так, то что может заменить
данную конструкцию. (Вопрос не критичный, просто интересно)
...
Рейтинг: 0 / 0
Производительность?
    #32010668
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем их сравнивать? If... else нельзя заменить на case и наоборот, потому что case используется только в выражениях select, а if...else в них использовать нельзя, инчае будете получать нечто вроде - Incorrect syntax near the keyword 'case'.
...
Рейтинг: 0 / 0
Производительность?
    #32010680
AlexIgnat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен с тобой полностью, и честно говоря не знаю точно что они имели ввиду.
Меня же больше волнут другой вопрос: насколько медленно работает IF...ELSE и стоит ли ее избегать (может быть в каких случаях). Потому что по моим небольшим опытам "тормозов" при выполнении этой конструкции я не заметил, не считая времени,которое затрачивается на выполнение запроса (если он присутствует), и в BOL "противопоказаний" по использованию не видел.
...
Рейтинг: 0 / 0
Производительность?
    #32010681
MessMaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вряд ли IF..ELSE может быть медленной конструкцией...
И потом, как правильно сказал Genady, у CASE и IF..ELSE совсем разное назначение.

Единственная ситуация, которая приходит в голову - это когда проводится попытка объединить несколько запросов в один, используя case для анализа некоего параметра.

Что-то типа:

\ndeclare @p int
set @p = 1

select col = case @p
when 1 then (select один_селект)
when 2 then (select другой_селект)
end
from ...


Можно заменить на:

\nif @p = 1
select один_селект
from ...
else
if @p = 2
select другой_селект
from ...


...или что-то вроде того...
...
Рейтинг: 0 / 0
Производительность?
    #32010714
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 MessMaker

Ваш пример наверное единственный случай (не факт, точно не уверен), когда case лучше, потому что если в процедуре поставить такую конструкцию:
if @p = 1
select один_селект
from ...
else
if @p = 2
select другой_селект
from ...

то если @p =1 строится один план запроса и как только @p = 2 получаем перкомпиляцию и новый план запроса

P.S. Как строится план заприса в случае использования Case не проверял, возможно что таким же образом.
...
Рейтинг: 0 / 0
Производительность?
    #32010718
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady
А мне так кажется что строиться два плана запроса сразу и никакой перекомпиляции не происходит.

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


2 AlexIgnat
Не было мыслей спросить, того кто так заявлял, как он сравнивал?
...
Рейтинг: 0 / 0
Производительность?
    #32010720
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А мне так кажется что строиться два плана запроса сразу и никакой перекомпиляции не происходит.
будет время, проверю.
>И вообще - надо своё время экономить, а не машинное.
В данном случае соглашусь

>Разница в вариантах - максимум доли процента, ради этого не стоит унижаться.
Не понял, почему унижаться

P.S. По моему мнению проблема не стоит этого... ну этого... яйца скушаного в общем
...
Рейтинг: 0 / 0
Производительность?
    #32010752
AlexIgnat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за подержку. Хотя действительно хочется еще поговорить с "авторами" фразы.
Единственный еще один маленький вопросик по рипведенному выше примеру, а именно

select col = case @p
when 1 then (select один_селект)
when 2 then (select другой_селект)
end
from ...

Может ли у нас использовать SELECT после THEN, и если может, то скиньте пожалуйста примерчик.
...
Рейтинг: 0 / 0
Производительность?
    #32010753
AlexIgnat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, примерчик уже не нужен
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Производительность?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]