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

Откуда:
Сообщений: 8768
добрый день!
как лучше быть:
 declare @USR_ID_TABLE table (USR_ID bigint) -> сюда спличу значения из @USR_IDS
...
WHERE (@USR_IDS    IS NULL OR A.USR_ID IN (SELECT USR_ID FROM @USR_ID_TABLE)) AND...


или
from T a
left join @USR_ID_TABLE b on A.USR_ID= b.USR_ID 

значений в @USR_ID_TABLE около 10 штук (обычно - меньше). Какой вариант быстрее? Или пох?
28 мар 12, 16:22    [12328471]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
Glory
Member

Откуда:
Сообщений: 104751
netivan
Какой вариант быстрее?

На такой вопрос лучше всего отвечает план выполнения
28 мар 12, 16:23    [12328484]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
netivan,

вообще говоря, запросы разные, могут давать разные результаты...
28 мар 12, 16:26    [12328519]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
netivan
Member

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

да. Jeft тут лишнее. Планы выполнения что-то одинаковы.
28 мар 12, 16:36    [12328619]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
netivan
iap,

да. Jeft тут лишнее. Планы выполнения что-то одинаковы.
Дело не в LEFT, а в том, что в @USR_ID_TABLE может оказазаться несколько одинаковых значений.
В случае IN это не повлияет на количество возвращаемых строк.
А JOIN вернёт задублированные.
28 мар 12, 16:41    [12328659]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
Активный Jefter
Guest
netivan
iap,

да. Jeft тут лишнее. .


Jeft - это на сленге от "гуру" что-то вроде "Join left" ?
28 мар 12, 16:42    [12328671]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
netivan,

вы сначала определите какой из этих запросов корректно решает вашу задачу, т.к. логика у них разная. например, если в @USR_IDS будет находится только id, не существующий в A.USR_ID, то первый запрос вернет пустой набор строк, а второй - всё из A
28 мар 12, 16:43    [12328674]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
netivan
Member

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

не может быть одинаковых по условию задачи. Проблема с NULL, т.е. когда таблица будет пустая. Не могу придумать как решить. в случае IN там все просто:
@USR_IDS IS NULL OR A.USR_ID IN (SELECT USR_ID FROM @USR_ID_TABLE)
28 мар 12, 16:47    [12328722]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
netivan
iap,

да. Jeft тут лишнее. Планы выполнения что-то одинаковы.

ну да. операцию IN оптимизатор всегда заменяет джоином, так что скорость тут одинаковая будет. А вот с логика тут разная, но про это уже написали.
28 мар 12, 17:09    [12328951]     Ответить | Цитировать Сообщить модератору
 Re: что лучше - in или join  [new]
netivan
Member

Откуда:
Сообщений: 8768
Ivan Durak,

ну и отлично. спасибо на добром слове.
28 мар 12, 17:16    [12328989]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить