하나의 테이블에 모든 로우의 개수를 알고 싶을때 보통 아래와 같이 작성을 많이 한다.
SELECT COUNT(*) FROM TestTable;
뭐 저렇게 사용해도 상관은 없지만 속도측면에서 좀 더 나은 방법이 있어서 소개 한다.
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('TestTable') AND indid < 2;
대충 보면 이해가 될 것이니 설명은 패스한다.
속도차이는 COUNT를 하려는 테이블의 총 로우 개수가 100개 미만이라면 COUNT가 더 빠르다.
100개 이상이라면 위에 적어놓은 쿼리가 훨씬 빠르다.
속도 차이가 나는 이유는 COUNT 키워드를 실행하게 되면 table scan을 하게되지만
대체 쿼리에서는 해당 rows값을 가져오기 때문에 더 빠르다.
물론 내가 테스트해본거니 확인은 다들 해보고 적용하기 바란다.
* 해당 쿼리는 테이블의 전체 로우 개수를 가져올때만 유효하다.