Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как работают AND и OR? Как в C++ или как в бейсике?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4374
Будет ли вычисление второго операнда, если первый уже false (перед and) или true (перед or)?
15 май 14, 15:06    [16021624]     Ответить | Цитировать Сообщить модератору
 Re: Как работают AND и OR? Как в C++ или как в бейсике?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
если верить профайлеру с вот таким примером:

use tempdb
go

create function dbo.f1() returns int as begin return 1 end
go

create function dbo.f2() returns int as begin return 1 end
go

select 1 where dbo.f1() = 1 or dbo.f2() = 1
go

select 1 where dbo.f1() != 1 and dbo.f2() != 1
go

if dbo.f1() = 1 or dbo.f2() = 1 select 1 else select 0
go

if dbo.f1() != 1 and dbo.f2() != 1 select 1 else select 0
go

create proc dbo.p1
as
select 1 where dbo.f1() = 1 or dbo.f2() = 1
select 1 where dbo.f1() != 1 and dbo.f2() != 1
go

exec dbo.p1
go

drop proc dbo.p1
go

drop function dbo.f1
go

drop function dbo.f2
go


то лишнее не вызывается
15 май 14, 15:12    [16021673]     Ответить | Цитировать Сообщить модератору
 Re: Как работают AND и OR? Как в C++ или как в бейсике?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Неоднократно обсуждалось, что сервер выбирает порядок операндов AND или OR по своему усмотрению.
Так что лишнее не вычисляет, но это "лишнее" - сегодня одно, а завтра может быть другое.
15 май 14, 15:16    [16021698]     Ответить | Цитировать Сообщить модератору
 Re: Как работают AND и OR? Как в C++ или как в бейсике?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Predicate ordering is not guaranteed
15 май 14, 15:20    [16021724]     Ответить | Цитировать Сообщить модератору
 Re: Как работают AND и OR? Как в C++ или как в бейсике?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Сервер же не интерпретатор. Он работает на основании плана запроса, который много отчего зависит.
Кроме того, OR, как правило, приводит к значительному падению производительности.
15 май 14, 15:39    [16021842]     Ответить | Цитировать Сообщить модератору
 Re: Как работают AND и OR? Как в C++ или как в бейсике?  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4374
Владислав Колосов
Сервер же не интерпретатор. Он работает на основании плана запроса, который много отчего зависит.
Кроме того, OR, как правило, приводит к значительному падению производительности.

любопытно...
т.е. имеется в виду "Or, в отличие от AND"? или вообще "и or и and"? Что тогда вместо них использовать?
А что быстрее, "and", или "in"?
15 май 14, 18:45    [16023258]     Ответить | Цитировать Сообщить модератору
 Re: Как работают AND и OR? Как в C++ или как в бейсике?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Charles Weyland,

пассаж про "медленность" OR был в контексте использования в JOIN / WHERE
а для IF / WHILE всяких - одинаково
15 май 14, 19:22    [16023464]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить