반응형
개발을 하다 보면 페이징 처리를 위해 아래와 같이 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
반응형
'Database ( DB ) > Database' 카테고리의 다른 글
[oracle] 성능 향상을 위해 로그 기록하지 않기 (0) | 2019.08.11 |
---|---|
MySQL 쿼리 실시간 모니터링 (0) | 2019.08.10 |
[MySQL] COUNT의 잘못된 인식과 속도 차이 (0) | 2019.08.10 |
mysql 날짜검색시 between 안에 포함되는 날짜전체 출력 (0) | 2019.08.10 |
DB key값이 무조건 대문자로 return 될 때 해결 방법 (0) | 2019.08.10 |