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

Откуда: Київ
Сообщений: 10428
что оптимальнее, если надо вернуть только записи из таблицы 1, которые есть в талице 2 ?
8 сен 09, 13:19    [7631298]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN или INTERSECT?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Winnipuh,

Сравнить планы выполнения и статистику IO.
8 сен 09, 13:20    [7631300]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN или INTERSECT?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
pkarklin
Winnipuh,

Сравнить планы выполнения и статистику IO.


это-то понятно, если конкретные запросы, а что можно сказать в общем случае?
8 сен 09, 14:15    [7631755]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN или INTERSECT?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh
pkarklin
Winnipuh,

Сравнить планы выполнения и статистику IO.


это-то понятно, если конкретные запросы, а что можно сказать в общем случае?

В общем случае оптимальным является тот запрос, который выполняется быстрее и с меньшим количеством чтений
8 сен 09, 14:17    [7631774]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN или INTERSECT?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Winnipuh
если надо вернуть только записи из таблицы 1, которые есть в талице 2 ?
inner join не всегда можно использовать для этой цели
declare @t1 table(code int)
insert into @t1(code)
select 1 union all
select 2

declare @t2 table(code int)
insert into @t2(code)
select 1 union all
select 1

select t1.code
  from @t1 as t1
  join @t2 as t2 on t1.code = t2.code

select code
  from @t1
intersect
select code
  from @t2

code
-----------
1
1

(2 row(s) affected)

code
-----------
1

(1 row(s) affected)
8 сен 09, 14:41    [7631938]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN или INTERSECT?  [new]
sfans
Member

Откуда:
Сообщений: 392
Паганель
Winnipuh
если надо вернуть только записи из таблицы 1, которые есть в талице 2 ?
inner join не всегда можно использовать для этой цели
declare @t1 table(code int)
insert into @t1(code)
select 1 union all
select 2

declare @t2 table(code int)
insert into @t2(code)
select 1 union all
select 1

select t1.code
  from @t1 as t1
  join @t2 as t2 on t1.code = t2.code

select code
  from @t1
intersect
select code
  from @t2

code
-----------
1
1

(2 row(s) affected)

code
-----------
1

(1 row(s) affected)


и с точностью до наоборот
intersect не всегда можно использовать для этой цели
ибо
SQL Server 2008 Books Online
EXCEPT and INTERSECT (Transact-SQL)
Returns distinct values by comparing the results of two queries.
8 сен 09, 15:44    [7632409]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить