본문 바로가기

프로그래밍/MSSQL

[MSSQL] COUNT 대체 쿼리 (속도 향상)


하나의 테이블에 모든 로우의 개수를 알고 싶을때 보통 아래와 같이 작성을 많이 한다.


SELECT COUNT(*) FROM TestTable;


뭐 저렇게 사용해도 상관은 없지만 속도측면에서 좀 더 나은 방법이 있어서 소개 한다.


SELECT rows FROM sysindexes WHERE id = OBJECT_ID('TestTable') AND indid < 2;


대충 보면 이해가 될 것이니 설명은 패스한다.


속도차이는 COUNT를 하려는 테이블의 총 로우 개수가 100개 미만이라면 COUNT가 더 빠르다.


100개 이상이라면 위에 적어놓은 쿼리가 훨씬 빠르다.


속도 차이가 나는 이유는 COUNT 키워드를 실행하게 되면 table scan을 하게되지만 


대체 쿼리에서는 해당 rows값을 가져오기 때문에 더 빠르다.


물론 내가 테스트해본거니 확인은 다들 해보고 적용하기 바란다.


* 해당 쿼리는 테이블의 전체 로우 개수를 가져올때만 유효하다.