[SQL] ROW_NUMBER를 사용하여 쿼리에서 @@ 행 개수를 얻기의 효율적인 방법
SQLROW_NUMBER를 사용하여 쿼리에서 @@ 행 개수를 얻기의 효율적인 방법
나는 쿼리 페이지 매김 될 때 나는 레코드의 하위 목록을 반환 SQL 서버 2005 년 () 기능을 통해 ROW_NUMBER를 사용하여 고가의 쿼리가 있습니다. 그러나 나는 또한 총 레코드 수뿐만 아니라 페이지가 매겨진 하위 집합을 반환하고 싶습니다. 카운트를 얻기 위해 효과적으로 두 번 쿼리를 실행하면 밖으로 질문입니다.
나는이 시도했습니다 때 성능이 절대적으로 끔찍한로 COUNT (*)를 선택하면 밖으로 질문도있다.
내가 좋겠 정말 사랑 @@ ROW_NUMBERROWCOUNT입니다 :-)
해결법
-
==============================
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.수년에 걸쳐 개발자 땀의 더미 효율적으로 페이징 결과 세트로왔다. 이 사용 사례에 따라 달라집니다 - 그러나, 아무 대답이 없다. 유스 케이스의 일부는 효율적으로 페이지를 받고, 일부는 완전한 결과 집합에있는 행 수를 파악되고있다. 미안 그래서 내가 페이징에 조금 이탈하는 경우,하지만이 꽤 단단하게 내 마음에 결합된다.
수년에 걸쳐 개발자 땀의 더미 효율적으로 페이징 결과 세트로왔다. 이 사용 사례에 따라 달라집니다 - 그러나, 아무 대답이 없다. 유스 케이스의 일부는 효율적으로 페이지를 받고, 일부는 완전한 결과 집합에있는 행 수를 파악되고있다. 미안 그래서 내가 페이징에 조금 이탈하는 경우,하지만이 꽤 단단하게 내 마음에 결합된다.
당신이 데이터 볼륨의 모든 종류를 및 유스 케이스에 맞지 않는 경우 나쁜 대부분의 전략이 많이 있습니다. 이, 전체 목록이 아닙니다 다음 동안 옵션의 일부입니다 .....
읽어 내 좋은 사람을 읽어보십시오. 저는 여기에 기대어 한 몇 가지 기사는 ...
희망이 도움이.
-
==============================
3.(*) 카운트가 느린 경우 당신은 정말 신중하게 인덱스를 검사하고 확인 통계가 최신하여 첫 번째 주소에 그 문제가 필요합니다.
(*) 카운트가 느린 경우 당신은 정말 신중하게 인덱스를 검사하고 확인 통계가 최신하여 첫 번째 주소에 그 문제가 필요합니다.
내 경험에 의하면, 아무것도 더 나은 두 개의 쿼리, 하나는 데이터 페이지를 얻기 위해, 하나는 총 수를 얻기 위해하는 것보다이 없습니다. 총 수를 얻기 위해 임시 테이블을 사용하여 행 증가의 전화 번호로 잃고 전략이다. 예를 들어, 단순히 계산하기 위해 임시 테이블에 10,000,000 백만 행을 삽입하는 비용은 분명히 과도한 될 것입니다.
-
==============================
4.내가 임시 테이블에 ROW_NUMBER와 전체 결과 집합을 넣어 이렇게, 그에서 @@ ROWCOUNT를 사용하고 내가 필요한 데이터의 페이지를 반환하는 것을에 쿼리를 사용합니다.
내가 임시 테이블에 ROW_NUMBER와 전체 결과 집합을 넣어 이렇게, 그에서 @@ ROWCOUNT를 사용하고 내가 필요한 데이터의 페이지를 반환하는 것을에 쿼리를 사용합니다.
from https://stackoverflow.com/questions/1038506/efficient-way-of-getting-rowcount-from-a-query-using-row-number by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 날짜, 시간, DATETIME, 및 TIMESTAMP 유형 사이에 어떤 차이 (0) | 2020.06.21 |
---|---|
[SQL] SQL 서버 계획 : 인덱스 스캔 / 인덱스 힘쓰라의 차이 (0) | 2020.06.21 |
[SQL] 왜 대다 관계? (0) | 2020.06.21 |
[SQL] id 필드에 다시 씨앗으로 길을 레일 (0) | 2020.06.21 |
[SQL] SQL에서 여러 행을 삭제하는 방법 어디 ID = (X와 Y) (0) | 2020.06.21 |