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

Код: 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
Можно ли как-то ускорить Lag()?
    #40098725
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Усачёв,

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


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

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


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