복붙노트

[SQL] ROW_NUMBER를 사용하여 쿼리에서 @@ 행 개수를 얻기의 효율적인 방법

SQL

ROW_NUMBER를 사용하여 쿼리에서 @@ 행 개수를 얻기의 효율적인 방법

나는 쿼리 페이지 매김 될 때 나는 레코드의 하위 목록을 반환 SQL 서버 2005 년 () 기능을 통해 ROW_NUMBER를 사용하여 고가의 쿼리가 있습니다. 그러나 나는 또한 총 레코드 수뿐만 아니라 페이지가 매겨진 하위 집합을 반환하고 싶습니다. 카운트를 얻기 위해 효과적으로 두 번 쿼리를 실행하면 밖으로 질문입니다.

나는이 시도했습니다 때 성능이 절대적으로 끔찍한로 COUNT (*)를 선택하면 밖으로 질문도있다.

내가 좋겠 정말 사랑 @@ ROW_NUMBERROWCOUNT입니다 :-)

해결법

  1. ==============================

    1.OVER와 함께 사용할 때 COUNT (*) 집계를 확인하십시오 (파티션 BY ..),과 같이 :

    OVER와 함께 사용할 때 COUNT (*) 집계를 확인하십시오 (파티션 BY ..),과 같이 :

        SELECT
         ROW_NUMBER() OVER(ORDER BY object_id, column_id) as RowNum
        , COUNT(*) OVER(PARTITION BY 1) as TotalRows
        , * 
        FROM master.sys.columns
    

    이 이럴 두 쿼리를 할 필요없이 그것을 할 수있는 가장 좋은 방법입니다.

  2. ==============================

    2.수년에 걸쳐 개발자 땀의 더미 효율적으로 페이징 결과 세트로왔다. 이 사용 사례에 따라 달라집니다 - 그러나, 아무 대답이 없다. 유스 케이스의 일부는 효율적으로 페이지를 받고, 일부는 완전한 결과 집합에있는 행 수를 파악되고있다. 미안 그래서 내가 페이징에 조금 이탈하는 경우,하지만이 꽤 단단하게 내 마음에 결합된다.

    수년에 걸쳐 개발자 땀의 더미 효율적으로 페이징 결과 세트로왔다. 이 사용 사례에 따라 달라집니다 - 그러나, 아무 대답이 없다. 유스 케이스의 일부는 효율적으로 페이지를 받고, 일부는 완전한 결과 집합에있는 행 수를 파악되고있다. 미안 그래서 내가 페이징에 조금 이탈하는 경우,하지만이 꽤 단단하게 내 마음에 결합된다.

    당신이 데이터 볼륨의 모든 종류를 및 유스 케이스에 맞지 않는 경우 나쁜 대부분의 전략이 많이 있습니다. 이, 전체 목록이 아닙니다 다음 동안 옵션의 일부입니다 .....

    읽어 내 좋은 사람을 읽어보십시오. 저는 여기에 기대어 한 몇 가지 기사는 ...

    희망이 도움이.

  3. ==============================

    3.(*) 카운트가 느린 경우 당신은 정말 신중하게 인덱스를 검사하고 확인 통계가 최신하여 첫 번째 주소에 그 문제가 필요합니다.

    (*) 카운트가 느린 경우 당신은 정말 신중하게 인덱스를 검사하고 확인 통계가 최신하여 첫 번째 주소에 그 문제가 필요합니다.

    내 경험에 의하면, 아무것도 더 나은 두 개의 쿼리, 하나는 데이터 페이지를 얻기 위해, 하나는 총 수를 얻기 위해하는 것보다이 없습니다. 총 수를 얻기 위해 임시 테이블을 사용하여 행 증가의 전화 번호로 잃고 전략이다. 예를 들어, 단순히 계산하기 위해 임시 테이블에 10,000,000 백만 행을 삽입하는 비용은 분명히 과도한 될 것입니다.

  4. ==============================

    4.내가 임시 테이블에 ROW_NUMBER와 전체 결과 집합을 넣어 이렇게, 그에서 @@ ROWCOUNT를 사용하고 내가 필요한 데이터의 페이지를 반환하는 것을에 쿼리를 사용합니다.

    내가 임시 테이블에 ROW_NUMBER와 전체 결과 집합을 넣어 이렇게, 그에서 @@ ROWCOUNT를 사용하고 내가 필요한 데이터의 페이지를 반환하는 것을에 쿼리를 사용합니다.

  5. from https://stackoverflow.com/questions/1038506/efficient-way-of-getting-rowcount-from-a-query-using-row-number by cc-by-sa and MIT license