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

Откуда:
Сообщений: 33
Во многих статьях пишут, что INNER быстрее чем LEFT, только вот без доказательно. А есть ли пример или дока на сие ? Буду очень признателен.
з.ы. Как работают соединения я знаю.
22 дек 09, 14:58    [8102223]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
Glory
Member

Откуда:
Сообщений: 104760
relok
Во многих статьях пишут, что INNER быстрее чем LEFT, только вот без доказательно. А есть ли пример или дока на сие ? Буду очень признателен.
з.ы. Как работают соединения я знаю.

INNER и OUTER дают разные результаты. Как можно справнивать запросы, дающие разные результаты ?
22 дек 09, 15:01    [8102264]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
iljy
Member

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

create table #t1(id int primary key, name varchar(20))
create table #t2 (id int primary key, name varchar(20))

insert into #t1
select N * 2, 'Obj '+ STR(N) from
(
	select top 1000 ROW_NUMBER() over(order by (select 1)) N
	from master..spt_values
) t

insert into #t2
select N * 3, 'Obj '+ STR(N) from
(
	select top 5 ROW_NUMBER() over(order by (select 1)) N
	from master..spt_values
) t

select * from
#t1 t1 join #t2 t2 on t1.id = t2.id

select * from
#t1 t1 left join #t2 t2 on t1.id = t2.id


drop table #t1
drop table #t2
по поводу сравнения разных результатов Glory безусловно прав, но если хочется посравнивать - вот пример.
22 дек 09, 15:07    [8102314]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
vino
Member

Откуда:
Сообщений: 1191
relok
Во многих статьях пишут, что INNER быстрее чем LEFT, только вот без доказательно. А есть ли пример или дока на сие ? Буду очень признателен.
з.ы. Как работают соединения я знаю.
Видимо, Вы упустили, что для LEFT вычитывается весь левый источник, а для INNER сие обычно не нужно
22 дек 09, 15:13    [8102376]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Для LEFT JOIN выполняется INNER JOIN и добавляются "внешние" записи для левой таблицы.
22 дек 09, 15:16    [8102408]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
relok
Member

Откуда:
Сообщений: 33
Ух.... ругаю себя, тяжело объяснить, что я имел ввиду. То что inner и left даст разные результаты я понимаю. Счас попытаюсь объъянить, я имею ввиду к примеру

create table #t1(id int primary key, name varchar(20))
create table #t2 (id int primary key, name varchar(20))

insert into #t1
select N * 2, 'Obj '+ STR(N) from
(
	select top 1000 ROW_NUMBER() over(order by (select 1)) N
	from master..spt_values
) t

insert into #t2
select N * 2, 'Obj '+ STR(N) from
(
	select top 1000 ROW_NUMBER() over(order by (select 1)) N
	from master..spt_values
) t


select * from
#t1 t1 join #t2 t2 on t1.id = t2.id

select * from
#t1 t1 left join #t2 t2 on t1.id = t2.id


drop table #t1
drop table #t2

обратите внимание данные в таблицах одинаковые, да и план запроса в left будет менятся в сторону inner, но только вот в данной ситуации left в любом случаи равен inner ?! или же можно найти пример не равенства ?!
22 дек 09, 16:37    [8103064]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
relok
Member

Откуда:
Сообщений: 33
Когда говорю равен имею ввиду скорость
22 дек 09, 16:39    [8103081]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
Glory
Member

Откуда:
Сообщений: 104760
relok
Когда говорю равен имею ввиду скорость

Неважно написали вы inner или outer. Важно какой план построил оптимизатор.
Запросы с одинаковым планом работают одинаково
22 дек 09, 16:43    [8103127]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
[off]
Я вообще не понимаю, зачем автору это исследование
Ну докажет автор опытным путем, что мерседес быстрее экскаватора. Ну и что?
Как на деле это научное открытие применить? А никак...
Иногда нужен мерседес, а иногда - экскаватор
Просто потому что они нужны для разных целей
[/off]
22 дек 09, 16:44    [8103140]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
iljy
Member

Откуда:
Сообщений: 8711
relok

обратите внимание данные в таблицах одинаковые, да и план запроса в left будет менятся в сторону inner, но только вот в данной ситуации left в любом случаи равен inner ?! или же можно найти пример не равенства ?!

Вы не с того конца подходите. Ваш пример - это частный случай, в котором планы будут похожи (с точностью до операции соединения - merge inner либо left join). Поймите, что логически left - это расширение inner, вам jap это уже сказал, да и сами надеюсь понимаете. И это приводит к тому, что inner выдает заведомо не больше записей. Соответственно если у вас происходит перебор всех, а потом из них выбор нужных - планы будут очень похожи, но если есть способ выбрать нужные за меньше количество операций - для inner оптимизатор может им воспользоваться. А для left такой альтернативы просто нет.
22 дек 09, 16:47    [8103160]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
relok
Member

Откуда:
Сообщений: 33
iljy
relok

обратите внимание данные в таблицах одинаковые, да и план запроса в left будет менятся в сторону inner, но только вот в данной ситуации left в любом случаи равен inner ?! или же можно найти пример не равенства ?!

Вы не с того конца подходите. Ваш пример - это частный случай, в котором планы будут похожи (с точностью до операции соединения - merge inner либо left join). Поймите, что логически left - это расширение inner, вам jap это уже сказал, да и сами надеюсь понимаете. И это приводит к тому, что inner выдает заведомо не больше записей. Соответственно если у вас происходит перебор всех, а потом из них выбор нужных - планы будут очень похожи, но если есть способ выбрать нужные за меньше количество операций - для inner оптимизатор может им воспользоваться. А для left такой альтернативы просто нет.

Ну да, во общем, да. Просто наверное даже изначально глупо было сравнивать INNER c LEFT. Всем спасибо.
з.ы. Кстати время подготовки плана, у INNER быстрее (при вышеописанном мной примере), чем у LEFT ))
22 дек 09, 17:06    [8103308]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
Glory
Member

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

з.ы. Кстати время подготовки плана, у INNER быстрее (при вышеописанном мной примере), чем у LEFT ))

А как вы меряли "время подготовки плана" ?
22 дек 09, 17:07    [8103318]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
relok
Member

Откуда:
Сообщений: 33
Glory
relok

з.ы. Кстати время подготовки плана, у INNER быстрее (при вышеописанном мной примере), чем у LEFT ))

А как вы меряли "время подготовки плана" ?

CompileTime в свойствах при подготовке плана
22 дек 09, 17:15    [8103352]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
Glory
Member

Откуда:
Сообщений: 104760
relok
Glory
relok

з.ы. Кстати время подготовки плана, у INNER быстрее (при вышеописанном мной примере), чем у LEFT ))

А как вы меряли "время подготовки плана" ?

CompileTime в свойствах при подготовке плана

Там разница в 0-3 ms. А при кэшировании вообще нет разницы
22 дек 09, 17:22    [8103417]     Ответить | Цитировать Сообщить модератору
 Re: INNER и LEFT  [new]
relok
Member

Откуда:
Сообщений: 33
Glory
relok
Glory
relok

з.ы. Кстати время подготовки плана, у INNER быстрее (при вышеописанном мной примере), чем у LEFT ))

А как вы меряли "время подготовки плана" ?

CompileTime в свойствах при подготовке плана

Там разница в 0-3 ms. А при кэшировании вообще нет разницы

Я вижу, бог с ним.
22 дек 09, 17:26    [8103453]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить