2012-01-26 5 views
0

일시적인 데이터에 대한 시뮬레이션을 실행하는 응용 프로그램이 있습니다. 계산은 지나치게 복잡하지는 않지만 계산에는 동일한 시뮬레이션에서 이전에 예측 된 시간 데이터가 필요합니다.TSQL 커서 및 스칼라 함수를 바꾸는 방법

15 분 간격으로 데이터 포인트가있는 1 주 데이터를 사용하여 시뮬레이션을한다고 가정합니다. 다음과 같이 예측 된 값의 단순 계산이다

PredictedValue = A + B + C + D 

는 B, C 및 D의 값을 얻기 위해서는, 시뮬레이션 이전 T0에서 데이터, t-1, T-95, T-96를 계산할 필요 , t-672 및 t-673. 이것은 현재 및 이전 간격, 전날의 현재 및 이전 간격 및 이전 주간 현재 및 이전 간격에 대한 시간 데이터입니다.

나는 어느 기간 에든 데이터를 시뮬레이트하는 작업 구현을 가지고 있지만 성능은 대용량 데이터 세트에서 극히 열악합니다.

구현은 TSQL 커서를 사용하여 시뮬레이션 및 스칼라 함수로 시간 데이터를 반복하여 이전에 계산 된 데이터를 검색합니다.

기본적으로 데이터 집합이 클수록 시뮬레이션 실행 속도가 느립니다. 예를 들어, 1 일의 데이터를 사용하는 시뮬레이션은 < 1 분; 한 달의 데이터로 시뮬레이션하는 데 2-3 일이 걸립니다.

저는 커서 나 스칼라 함수를 사용하지 않고 TSQL 코드의 성능을 향상시킬 수있는 방법에 관심이 많습니다.

+1

은 기존 구현을위한 몇 가지 코드를 공유합니다. 우리는 당신이 커서 대신 세트를 사용하여 다시 쓸 수 있도록 도울 수 있습니다 –

+0

코드 일부를 게시 할 수 있습니까? – Beth

+0

날짜/시간과 관련된 성능 문제는 종종 인덱스 (또는 인덱스 부족)와 관련이 있으며 WHERE 절에서 부적절하게 함수를 사용하는 경우가 많습니다. DB 엔진이 테이블의 모든 행에 함수를 적용하도록하면 (예 : WHERE YEAR (DATE_COL)> 2000, 테이블이 커지면 성능이 저하됩니다. – HABO

답변

1

이 경우 자체 조인을 사용하는 것이 좋습니다. SQL 서버는 질의를 처리하여 엄청난 속도 증가를 가져올 수 있습니다.

간단한 예는 테이블을 가정하는 것은 두 개의 열 (날짜 값)을 가지고 있으며, 데이터

SELECT (A.value + B.value) as Prediction 
FROM [Data] A left join [Data] B 
ON B.date = dateadd(day,-1, A.date) 

라고 (오타의를 포함 할 수 있으므로 테스트하지 않고 일을 -하지만 난 당신이 사진을 얻을 희망).

행운을 빌어 요, 오토.

관련 문제