Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли как-то ускорить Lag()? / 4 сообщений из 4, страница 1 из 1
20.09.2021, 16:04
    #40098714
Андрей Усачёв
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли как-то ускорить Lag()?
Казалось бы, обойти таблицу по кластерному индексу и просуммировать поле из "предыдущей записи" должно быть (почти) так же просто, как просто просуммировать это поле по всей таблице. Ан нет :( Можно ли что-то сделать?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
create table #Tmp(n int not null primary key)
insert into #Tmp values(0)

declare @k int = 1

while @k < 1024 * 1024 * 32
begin
	insert into #Tmp
	select n + @k
	from #Tmp

	select @k = @k + @k
end

declare @dummy bigint

declare @d1 datetime = GetDate()

select
	@dummy = Sum(Convert(bigint, n))
from
	#Tmp

declare @d2 datetime = GetDate()

select
	@dummy = Sum(convert(bigint, n0))
from
	(
	select
		n0 = Lag(n) over (order by n)
	from
		#Tmp
	) as Q

declare @d3 datetime = GetDate()

select Convert(time(3), @d2 - @d1), Convert(time(3), @d3 - @d2)
-- 00:00:01.460, 00:00:46.273

drop table #Tmp
...
Рейтинг: 0 / 0
20.09.2021, 16:42
    #40098725
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли как-то ускорить Lag()?
Андрей Усачёв,

Неправильно сравниваете.
Первый запрос будет с параллелизмом, второй - нет. Поэтому сравнивать нужно CPU time, а не elapsed time.
...
Рейтинг: 0 / 0
20.09.2021, 17:45
    #40098754
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли как-то ускорить Lag()?
Андрей Усачёв
Можно ли что-то сделать?


Варианты
1. Рассказать нам "нафига козе баян"? Это самое эффективное.
2. Использовать инструменты по предназначению, т.е. юзать sum over.
...
Рейтинг: 0 / 0
21.09.2021, 16:38
    #40099081
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли как-то ускорить Lag()?
Андрей Усачёв,

Вы как-то странно мыслете, в реляционных системах нет понятия "обойти" и "вычислить предыдущее, потому что в них нет ни прошлого, ни будущего. Какие-либо действия по сортировке можно применить только к окончательному результату.
Какую задачу Вы хотите решить? Расчёт нарастающего итога?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли как-то ускорить Lag()? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]