2009-07-03 3 views
7

Sql Server 2008에서는 저장 프로 시저를 통한 데이터베이스 호출에 많은 옵션을 사용할 수 있습니다. 예를 들어, herehere을 참조하십시오.최상의 성능을위한 페이징 방법 (Sql Server 2008)은 무엇입니까?

옵션 :

  1. ROW_NUMBER() 함수
  2. ROWCOUNT
  3. CURSORS
  4. 임시 테이블
  5. 중첩 된 SQL은
  6. 기타
를 조회

어떤 페이징 방법은 (조인 대형 테이블) 최상의 성능을 가지고, 알려 주시기 바랍니다 : ROW_NUMBER를 사용 16,

페이징()는 performance issues 것으로 알려져있다?

가능한 경우 관련 기사에 대한 링크도 제공하십시오.

감사합니다.

+0

당신은 아마 당신이 ... 할 수있는 중요한 차이가 –

답변

3

최종 사용자에게 총 행 수를 표시하려면 대답해야 할 질문이 하나 있습니다. 마지막 페이지 번호를 계산하려면 마지막 행 번호도 필요합니다.

해당 정보없이 수행 할 수있는 경우 임시 테이블을 사용하는 것이 좋습니다. 보조 키를 선택하고 LIMIT을 사용하여 관심있는 키까지 키를 검색 할 수 있습니다.이 작업을 올바르게 수행하면 일반적인 유스 케이스가 처음 몇 페이지 만 검색합니다.

마지막 페이지 번호가 필요한 경우 ROW_NUMBER()를 사용할 수 있습니다. 임시 테이블을 사용하면 LIMIT 절을 사용할 수 없어 ROW_NUMBER() 계산과 동일한이 전략을 사용하기 때문에 훨씬 빠릅니다.

+0

+1 물어 세부 정보의 수준에 맞게 300 담당자의 현상금을 추가해야합니다. 그것을 포함하지 않는 성능 테스트는 나에게 유용하지 않습니다. – RedFilter

+0

감사합니다. 페이지 번호를 생성하려면 총 행 수가 필요합니다. ROWCOUNT 메서드가 가장 빠르지 만 고유 한 정렬 열 (내 경우 고유하지 않음)이 필요합니다. – dev

0

다음 쿼리를 사용하여 행 개수를 얻을 수 있습니다. 실제로 나는 항상 총 행 수를 필요 -

WITH data AS 
(
     SELECT ROW_NUMBER() OVER (order by memberid) AS rowid, memberid 
     FROM Customer 
) 
SELECT *, (select count(*) from data) AS TotalCount 
FROM data 
WHERE rowid > 20 AND rowid <= 30 
+0

OP는 가장 좋은 방법이 무엇인지 묻고 있으며 문제를 설명하는 다른 위치 (예 : 또 다른 해결책)을 제공합니다. –

관련 문제