2009-04-21 3 views
0

가설 예 :트랜잭션 테이블에서 변환을 가장 잘 추출하려면 어떻게해야합니까?

나는 억 정도 거래를 포함하는 SQL 테이블이 :

: 내가 원하는 것은 내가에만 비용을 전환를 볼 수 있도록 데이터 아래 쌍을하는 것입니다

 
| Cost | DateTime | 
| 1.00 | 2009-01-02 | 
| 2.00 | 2009-01-03 | 
| 2.00 | 2009-01-04 | 
| 3.00 | 2009-01-05 | 
| 1.00 | 2009-01-06 | 
... 

 
| Cost | DateTime | 
| 1.00 | 2009-01-02 | 
| 2.00 | 2009-01-03 | 
| 3.00 | 2009-01-05 | 
| 1.00 | 2009-01-06 | 
... 

이 작업을 수행하는 가장 간단한 방법은 전체 테이블을 반복하여 변경 내용을 추적하는 것입니다. SQL에서 더 빠르고 더 나은 방법이 있습니까?

+0

무엇을 전환합니까? –

+0

나는이 문제를 완전히 이해하지 못한다. 좀 더 구체적으로 해주실 수 있습니까? – Mostlyharmless

+0

그는 비용이 변하는 지점을 찾아달라고 요청합니다. 두 번째 순차 2.00 행을 건너 뛰었습니다. –

답변

0

아니요. 더 빠른 방법은 없습니다. 같은 일을하는 쿼리를 작성할 수는 있지만 훨씬 느려질 것입니다. 개발자는 직접 값을 이전 값과 비교해야한다는 것을 알고 있으므로이를 SQL로 지정할 방법이 없습니다. 그래서 당신은 SQL이 할 수없는 최적화를 할 수 있습니다. 그래서 가장 빠른 방법은 디스크에서 결과를 스트리밍하는 프로그램을 작성하는 것입니다. RAM에 마지막 유효 값과 현재 값 (마지막 유효 값과 동일한 모든 값을 필터링) 만 저장합니다.

0

이것은 해머가 필요할 때 슬레지 해머를 사용하려는 고전적인 예입니다. 테이블에서 미친보고 데이터를 추출하려고하지만 SQL Server를 죽일 것입니다. 변경 사항을 추적하기 위해 수행해야하는 작업은이 목적을 위해 특별히 추적 테이블을 만드는 것입니다. 그런 다음 제품의 값 변화를이 테이블에 기록하는 트리거를 사용하십시오. 따라서 제품 테이블에서 가격을 변경하면 가격 추적 테이블로 이동합니다.

이 값을 사용하여 주가 또는 이와 유사한 항목을 추적하는 경우 가격표를 비교하고 변경 사항이 발생하면 동일한 방법을 사용합니다. 따라서 새 데이터로만 비교가 이루어 지므로 이전 비교는 모두 한 위치에 보관되므로 SQL Server의 성능을 저하시킬 쿼리를 다시 실행할 필요가 없습니다.

+1

사실, 새로운 아키텍처 (및 스키마)로 시스템을 이식하기위한 마이그레이션 코드를 작성하고 있습니다. 독창적 인 디자인은 그런 변화를 추적하지 못했고, 그래서 나는 격렬한 플레이를하고 있습니다. 팁 주셔서 감사! –

관련 문제