Database ( DB )/Database

[oracle] COUNT(*) 를 빠르게 하는 방법

노루아부지 2019. 8. 10. 22:20

개발을 하다 보면 페이징 처리를 위해 아래와 같이 COUNT(*)를 해야 할 때가 있다.

 

SQL)   SELECT COUNT(*) FROM [테이블명] WHERE [조건]

 

이 경우 전체 테이블을 FULL SCAN 할 수도 있고 INDEX SCAN을 할 수도 있다. 이 경우 데이터가 많을 경우 많은 시간이 걸릴 수 있다.

 

만약 인덱스를 SCAN하는데 하나의 블록이 아니라 MULTI BLOCK을 SCAN한다면 당연히 SINGLE BLOCK SCAN보다 빠를 것이다.

 

이 때 사용하는 것이 INDEX FAST SCAN이다.

 

사용 방법은 아래와 같다.

 

SQL)   SELECT /*+ INDEX([테이블명] [인덱스명]) */ COUNT(*) FROM [테이블명] WHERE [조건];

 

사용 예 ) SELECT /*+ INDEX(EMP pk_emp */ COUNT(*) FROM EMP where empno > 0;

 

 

 

 

[참고사항]

위 처럼 HINT를 사용해도 HINT를 무시하고 

 

TABLE FULL SCAN

INDEX SCAN

INDEX FAST SCAN

 

중 하나를 알아서 선택하는 경우가 있다.

728x90
loading