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

Откуда:
Сообщений: 143
Что будет быстрее отрабатывать ?
1. select X-avg(X) from A where (условие на интервал)

2 declare @avg ....
select @avg = avg(X) from A where (условие на интервал)

select X-@avg from A where (условие на интервал)

Условие на интервал в 1.и 2. одно и то же

Т.е. вычислять отдельно значение агрегатной функции и потом получать нужный результат
или включать в select формулу агрегатной функции.
25 дек 13, 11:33    [15344165]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по производительности выражения с агрегатными функциями  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Первый запрос вообще не будет работать.
25 дек 13, 12:21    [15344496]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по производительности выражения с агрегатными функциями  [new]
.:Ajvol:.
Member

Откуда: Москва
Сообщений: 9
Типичный кейс для оконных функций (с MSSQL2008)

SELECT X - AVG(X) OVER(PARTITION BY 0) --
FROM A


или даже

SELECT X - AVG(X) OVER(PARTITION BY условие на интервал)
FROM A
25 дек 13, 13:36    [15345113]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по производительности выражения с агрегатными функциями  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
.:Ajvol:.
Типичный кейс для оконных функций (с MSSQL2008)
Только профита от них, в данном случае, никакого.
declare @t table (v int);
insert into @t
 select top (10000) 
  rand(checksum(newid())) * 1000
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

set statistics time, io on;

select v - avg(v) over () from @t;
select v - (select avg(v) from @t) from @t;

set statistics time, io off;
25 дек 13, 14:49    [15345685]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить