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

Откуда: Moscow
Сообщений: 907
Подскажите пожалуйста какой запрос будет быстрее - и почему. Хотелось бы понимания.

select distinct (...)
from
(
   select ..
   union all
   select ..
   union all
   select ..
)


или

select ...
from
(
   select ..
   union
   select ..
   union
   select ..
)
4 дек 14, 13:42    [16949370]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
планы +профайлер
Бо результат будет одинаковый по факту
4 дек 14, 13:43    [16949380]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ProBiotek
Хотелось бы понимания.

План выполнения и статистика чтений не дают понимания ?
4 дек 14, 13:44    [16949387]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
ProBiotek
Подскажите пожалуйста какой запрос будет быстрее - и почему. Хотелось бы понимания.

select distinct (...)
from
(
   select ..
   union all
   select ..
   union all
   select ..
)


или

select ...
from
(
   select ..
   union
   select ..
   union
   select ..
)


В теории это эквивалентные запросы. Что будет на практике, как вам сказали, надо смотреть план и статистику.
4 дек 14, 14:22    [16949686]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Вообще-то, смотря что прячется за разными многоточиями...
Да! И зачем там скобко после DISTINCT?
4 дек 14, 14:33    [16949784]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
правильный проходящий.
Guest
ProBiotek,

если бы однозначно что-то было бы быстрее, то уже давно бы все только этим одним вариантом бы и пользовались бы.
4 дек 14, 14:36    [16949809]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
a_voronin
В теории это эквивалентные запросы. Что будет на практике, как вам сказали, надо смотреть план и статистику.

Это зависит.
Например так, не эквивалентно
+
select distinct row_number() over(order by b) 
from
(
	select b from t1
	union all
	select c from t2
) t
;

select  row_number() over(order by b)
from
(
	select b from t1
	union
	select c from t2
) t
;

Вообще, любой вопрос из разряда "что быстрее: сферический запрос А в вакууме, или сферический запрос Б в вакууме", некорректен, т.к. включает в себя множество факторов, начиная от семантики запросов, и заканчивая объемом памяти, доступной серверу.
4 дек 14, 15:08    [16950120]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Кстати, не говоря уже о то, что сиквел пишут люди, и два абсолютно семантически одинаковых запроса, по одной и той же таблице могут давать разные планы.
Как вам такие эффекты:
declare @t as table(a int, b int, c as a*b unique clustered);
set statistics xml on;
select * from @t where c = 1; --Seek
select * from @t where a*b = 1; --Seek
select * from @t where b*a = 1; --Scan(!)
set statistics xml off;
go

=)
4 дек 14, 15:29    [16950272]     Ответить | Цитировать Сообщить модератору
 Re: Какой запрос выйдет быстрее?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
я за первый
шансов у него больше, если данных будет меньше. а если данных будет больше, то уже будет все равно
4 дек 14, 15:36    [16950315]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить