[ORACLE] count(*)와 count(column) 의 차이 공부

왠지 count할 때 어떤 컬럼을 기준으로 count를 할 것인가를 정해주면
왠지 더 멋지게 빠르게 잘 해줄것만 같은 기분이 들었습니다.
그래서 실험을 해봤죠.
count안에 들어가는 칼럼은 당연히 index가 걸려있는 칼럼입니다.

1. select count(*) from table;
2. select count(column) from table;
3. select /*+INDEX_FES(table column) */ count(*) from table;
4. select /*+INDEX_FES(table column) count(column) from table;

참고로 INDEX_FES 힌트는 INDEX FAST SCAN하게 하는겁니다.

빠르기는
3 > 1 > 4 > 2 순입니다.
어떤 컬럼의 인덱스를 FAST SCAN하는지를 정해주고 count(*)를 하는게 제일 빠르더군요.
생각보다 오라클은 머리가 좋습니다.
count(*)는 옵티마이저가 제일 좋은 방법을 찾아서 숫자를 세어주는가보더라구요.
아~ 츄닝의 길은 멀고도 험하다!

덧글

  • 엄끼 2007/11/23 17:59 # 답글

    난 count(0)
  • 구원 2007/11/23 18:01 # 답글

    엄끼 : 그게 뭐여?
  • 엄끼 2007/11/23 18:18 # 답글

    select count(0) from table;
  • 김용호 2009/08/11 13:59 # 삭제 답글

    select * from 테스트

    이름번호
    n
    11

    --------------------------
    select count(*) from 테스트

    2

    --------------------------
    select count(번호) from 테스트

    1

    --------------------------

    칼럼명을 지정하게 되면 그 칼럼의 값이 NULL 이 아닌 경우에 갯수를 세게 됩니다.
댓글 입력 영역



Google Analytics