2013-07-26 1 views
3

100000 개가 넘는 레코드가있는 SQL Server 테이블에서 레코드 수를 가져오고 싶습니다. Count(Id) 메서드를 사용하고 있지만 시간이 많이 걸립니다. 7) 8 secondes에, 빠르게 만들 수있는 방법이 내가있는 곳에 절을 사용하고 있음을 알고있다 내 Select가장 최적화 된 방법으로 SQL 서버 테이블에서 레코드 수를 얻으십시오.

SELECT Count(StudentID) WHERE Type = 1 AND Name Like %Sid% 

우리는 다음과 같은 방법을 사용할 수 있다는 것을 발견

SELECT rows FROM sysindexes 
WHERE id = OBJECT_ID('dbo.StudentID') AND indid < 2 

하지만 불행히도 내 WHERE 절을 추가 할 수 없습니다. 그것을 할 수 있습니까?

종류 필드

내 인덱스 정의 : (비 고유 비 클러스터)

+3

'유형'색인이 생성 되었습니까? –

+0

예 인덱스 됨 – SidAhmed

+2

@SidAhmed 해당 인덱스 정의를 질문에 추가 할 수 있습니까? –

답변

1

sysindexes.rows 반드시 당신이 언급대로, 당신의 부분 집합을 필터링 할 수 없습니다, 정확한 답을 제공하지 않습니다 기록들.

정확한 레코드 수를 알아야 할 경우 NULLS를 계산할지 여부에 따라 COUNT(*) 또는 COUNT(<column_name>)을 사용해야합니다.

첫 번째 열로 Type 열의 인덱스가있는 경우 쿼리 최적화 프로그램에서 해당 인덱스를 사용하여 자동으로 계산 속도를 높여야합니다.

2

조건으로 수를 계산하는 가장 효율적인 방법은 COUNT()입니다.

당신이 (즉,이 인덱스의 첫 번째 컬럼의 의미) Type에 유효한 인덱스가있는 경우,이 데이터베이스를 계산하는 StudentID를 가져올 필요가 없도록 바로 그 필드 또는 *을 계산하는 것이 좋습니다. 다른 말로; StudentID가 null이 될 수 있다면이 약간 쿼리의 의미를 변경됩니다

SELECT COUNT(Type) FROM Students WHERE Type=1 

또는

SELECT COUNT(*) FROM Students WHERE Type=1 

참고 행이 이전에 계산되지 않았을,하지만 지금 것이다 것입니다.

관련 문제