-1

나는 사용자가 달러 금액을 포함한 금융 거래를 입력 할 수있게하는 시스템을 가지고 있습니다. 트랜잭션이 시스템에 추가되거나 \ 업데이트되거나 제거되면 계정 총계가 다시 계산되어 사용자에게 즉각적으로 표시되어야합니다. 사용자는 시스템의 특정 계정에 액세스 할 수 있지만 모든 계정에 액세스 할 수는 없습니다.계정의 모든 거래 금액의 합계를 계산하는 효과적인 방법

아래는 계정 및 거래 데이터를 보관하는 표의 스크린 샷으로 연결되는 링크입니다.

http://i.imgur.com/EqV7w.png

현재 나는 다음과 같은 쿼리를 사용하는 계정의 총 얻기 위하여 :

select sum(t.Amount) 
from [Transaction] t 
join [Account] a on a.AccountId=t.AccountId 
where [email protected] 

내가 수 있습니다 고유하지 않은 비 클러스터형 통해 AccountId에 대한 트랜잭션 테이블에 인덱스와 양의 열이를 AccountId에 의해 신속하게 거래를 찾을 수있는 쿼리.

내가 원하는 것은 수행하지만, 트랜잭션 테이블이 매우 빠르게 성장하고 있으며 현재는 약 1 백만 개의 레코드가 있으며 시간이 지남에 따라 수천만 개가 될 것으로 예상됩니다. 또한 적극적으로 거래를 편집 할 수있는 사용자의 수가 증가하고 있으며,이 중 약 5500 대가 시스템에 있습니다.

시스템을 확장 할 수 있도록 계정의 총 $을 가져올 때 트랜잭션 테이블의 사용을 제한하는 해결책을 모색 중입니다. 나는 그것을위한 2 가지 해결책을 가지고 있습니다 :

  1. 정보를 필요로 할 때 특정 버튼을 클릭하도록 요구함으로써 계정 총계를 계산합니다. 나는 그 길로 갈지도 모르지만 계정 합계의 실시간 업데이트로 내 옵션을 계속 탐색하고 싶습니다.
  2. 누적 합계를 다른 곳에 저장하고 계좌 합계를 계산할 때 사용합니다. 이러한 모든 뉘앙스에 대해 알 수있는 단일 인터페이스를 통해 모든 작업을 수행해야하기 때문에 이와 관련된 제한이 있습니다. 누적 합계가 업데이트되었는지 확인해야하기 때문에 데이터베이스에서 트랜잭션을 편집하는 것은 까다 롭습니다.

다른 데이터베이스 성능에 대한 걱정없이 실시간으로 계정 합계를 계산할 수있는 다른 방법을 찾고 있습니다.

+0

텍스트의 벽 !!!! 일부 서식을주세요! 당신이 시도한 SQL과 함께 DB 스키마도 좋을 것이다. –

+0

죄송합니다. 첫 번째 게시물입니다. 일부 비주얼로 더 깨끗하게 업데이트했습니다. – Art

답변

0

성능 문제가있는 경우에만 의 마지막 솔루션을 사용하는 것이 좋습니다.
많은 양의 데이터를 처리하는 것은 데이터베이스 작업이므로 데이터가 올바르게 구성되어 있으면 수천 개의 행이있는 경우에도 SQL 쿼리가 제대로 수행 될 수 있습니다.
그래서 먼저 그런 식으로 계속 시도하십시오. 성능 문제가 발생하면 솔루션을 찾으십시오.

총계 필드를 유지하는 솔루션을 사용하기로 결정한 경우 총계 필드로 업데이트하지 않고 데이터를 업데이트 할 위험을 피하려면 트리거를 사용해야합니다. 행을 추가, 제거 또는 업데이트 할 때마다 Total 값을 더하거나 뺄 것.

Here's some help on how to create triggers.

0

테이블이 큰 경우에도 계정 아이디에 인덱스가 효율적으로 행의 상대적으로 적은 수의 쿼리에 관련된 행의 수를 잘라 것입니다.

이 유형의 쿼리가 많고 실제 트랜잭션보다 덜 산뜻한 요약을 사용하여 살아갈 수있는 경우 비정규화할 수있는 위치를보고하기위한 별도의 데이터베이스를 설정하고 요약 작성 등을 고려할 수 있습니다. 작업을 주기적으로 이러한 테이블을 업데이 트 (그 기본 아이디어는 "data warehouse" 뒤에 - 당신은 아마 본격적인 버전이 필요하지 않지만 같은 생각을 적용).

관련 문제