2011-09-20 3 views
2

내가 현재 100,000 기록을 포함하는 테이블 일하고, 그리고 미래에 더 많은 것, 지금 내 고객은 최고 절을 사용하여SQL Server 2008의 Top Clause에 대한 가장 좋은 대안은 무엇입니까?

의 성능을 감소하고, 이것이 같은 최신 TOP 10 기록 ... 원하는 모바일 응용 프로그램, 성능이 유일한 관심사이므로 최신 상위 10 개 레코드를 가져 오는 데있어 다른 방법과 가장 좋은 방법은 순서에 따라 성능 손실이 발생할 수 있습니다.

두 가지 모두 최상의 성능을 제공합니다.

답변

3

가장 좋은 옵션은 최신 10 개의 레코드가있는 다른 테이블을 사용하는 것입니다.

앱이 레코드를 삽입 할 때 두 테이블에 레코드를 기록해야합니다. 큰 테이블과 상위 테이블 중 하나입니다. 또는이 작업을 수행하는 트리거를 수행 할 수도 있습니다.

+0

:

SELECT TOP 10 OrderID, OrderDate, TotalPrice, Shipping, Status FROM CustomerOrder ORDER By OrderDate DESC 

당신은 (이상적)에 인덱스가 필요합니다. –

+0

+1 @Abbas가 트리거 오버 헤드에 신경 쓰지 않거나 데이터를 비정규 화하는 경우 가장 효과가있는 솔루션입니다. – Matthew

+0

@Gabotron : 내가 제대로했는지 확인해 보도록하겠습니다. 기본값 인 topArticle이라는 새 테이블을 작성하면 상위 10 개 기사가 추가됩니다. 이제 사용자가 새 기사를 추가하면 기본 기사 테이블에 추가됩니다. TopArticle 테이블에서 마지막 레코드를 제거하여 상위 10 개 레코드가 유지되도록합니다. 이것이 바로 당신이 의미 한 것입니다. 그리고 당신이 "큰 것"과 "상위 10 하나"의 의미를 말해 줄 수 있습니까? – Abbas

5

TOP 절을 사용하면 날짜 필드 (또는 최신 필드를 식별하는 데 사용하는 필드)에 적절한 인덱스가 없으므로 성능이 저하됩니다. 같은 쿼리의 경우 : 정말이 솔루션 같은

(OrderDate, OrderID) INCLUDE (TotalPrice, Shipping, Status) 
+3

+1 이것은 * 올바른 * 올바른 것입니다. 적절한 인덱스가 주어지면 MSSQL은 행 수에 관계없이 데이터를 즉시 검색 할 수 있어야합니다. – Matthew

관련 문제