Q&A

  • 조합 인덱스
안녕하세요
왕초보 입니다.

그런데  조합 인덱스가 뭐예요....

조합 인덱스가 뭔지,
어케 만드는지
사용은 어케하는건지(특히 검색할때)

고수님들!
자세한 답변좀 부탁 드릴께요......
1  COMMENTS
  • Profile
    착한천사 2005.02.07 04:07
    착한천사 김경록입니다..
    데이타베이스를 하다보면, SQL문만 잘 구사할 수 있어도..
    삽질을 면할 수 있다는 점을 개발경력이 쌓이면
    대번에 알 수 있을 것입니다..
    아.. 이거.. 엉뚱한데로 새 버렸군요..

    index에 이름 붙이는 것은 Database에 따라서 좀 다릅니다..

    1.  싱글 INDEX
    2.  조합 INDEX(= 결합 INDEX)
    3.   Function based INDEX
    4.   Bitmap Index
    5.   Clusted INDEX
    6.   Tabled INDEX(indexed table이었나??  ^^;)

    등등 이 있습니다..
    이거 설명 다할려고 하면.. 엄청 길어지겠는데요..
    조금씩 줄이면서, 예제는 빼고 설명 드리는쪽으로 하겠습니다..
    위에 Index 1~6을 설명 다 드릴려면...
    책 1권분량이 나오기때문에 줄이도록 하겠습니다..


    1. 싱글 Index는 아시겠죠?
    한 table의 특정 1개 Column에 대해서 Index를 만든 것이죠

    2.  조합(결합) INDEX.
    이것은 index를 만들때, 여러개의 Column을 Index로 지정한 것입니다.
    예) create index 인덱스명 on 테이블(컬럼1,컬럼2,.....컬럼n)

    조합(결합) index를 이용하는 주된 이유를 말하면,
    싱글 index에서 분포도가 나빠서, 조회시 속도가 나오질 않을때
    나쁜 분포도를 가진 index에 특정 column을 추가한 index를
    만들어, 분포도를 좋게한 것입니다..
    주된 의도가 좋은 분포도를 만들어서 select 효율을 올리자는 것이겠지요.. 물론, 다른 의도도 있습니다만..
    그런걸 비교해서 설명할려면, 책 30Page정도는 더 나올 겁니다..
    오라클 튜닝 관련 서적을 보신다면, 내용을 추측할 수 있을 것입니다.

    3. function based index
    이것은 기존의 index가 걸린 column을 where에서 가공(함수사용, 연산자 사용등등)함으로 인하여, Index를 사용하지 못하는
    단점을 해결하고자 만든 거이지요.. (간단히 말해서.. ^^;)
    단, function based index는 CBO(Cost based Optimize)에서만
    작동을 하니깐.. 조심해야만 합니다..
    이것도 예제로 설명드리면 간단하겠지만..
    역시 튜닝서적 혹은 오라클 서적을 참고하시길..


    4. bitmap index
    컬럼의 값이 몇가지 유형( Y/N 혹은 1,2,3과 같은것)으로
    고정되어져 있을 때 사용하는 것으로,
    DataWare House에 주로 사용되는 것입니다..
    물론, Read만 하는 Table에 사용하길 적극 권장하구요..
    특히, update가 빈번히 발생하는 table에는
    무조건적으로 사용하시지 않기를 권합니다..
    bitmap index를 가지고 where절을 구사할때
    Optimizer는 Boolean 연산같은 개념으로 처리할 수 있습니다..

    where 조건에

    where 컬럼1 = '1'
      and 컬럼2 = '5'
    이렇다면,
    Optimizer는
    ------------------------------------
       컬럼1  컬럼2
    ------------------------------------
          1       4          ==> false  
          3       4          ==> false  
          1       5          ==> true
          2       1          ==> false  
    ------------------------------------




    5. clusted index
    아.. 이것이야말로.. storage block 개념을 가지는 것이죠..
    한 Table의 특정 칼럼 1개를 block 단위로 저장하겠다는
    개념인데.. Full searching을 대비한 내용이라고 생각하면..
    조금 괜찮아질련지 모르겠습니다..
    이건, 예를 조금 들어야 겠군요..
    index가 걸린 컬럼이 날짜 컬럼이라면,
    2004~2005년 2년치 data를 index를 걸어서 조회를 한다면,
    실행계획을 보게될때,
    ①index   ②rowid
    를 이용해서 검색하게 됩니다.. 즉,
    구간 data 범위가 넓다면, index를 이용하여 read하는 내용의
    불합리성이 나타나므로, 순차적인 단위로 쭈~~욱 읽을 수 있는
    방법, table을 순차적으로 읽을 수 있는 절대적 방법을
    모색하게 되었는데.. 그게 clusted index입니다..
    즉, 년도별도 index값들을 모아 놓게끔 했다고 보시면 됩니다..
    즉, 2004, 2005, 2006 이렇게
    혹은, 2004/01, 2004/02.....  등등과 같이
    Block단위로 특정 data를 저장하여 순차적으로 쭈~~~욱
    (2004년 1년 data를 순차적으로 쭈~~욱)
    읽어오기 위한 방편입니다.. 그렇다고,
    full searching과는 개념이 다르니.. 같다고 생각하시진 마시길..

    헉헉...

    6.  indexed table(인덱스처리된 테이블)
    table의 각 Row를 index 컬럼 기준으로 index 구성한 것을
    말합니다..
    즉, 저장소는 별도로 가지지 않고, 모든 row의 값들이
    index에 저장되어져 있습니다..
    (이런것은 메모리가 아주 고용량이어야 하겠죠?
    왜냐? 자주 쓰는 index는 메모리에 Full dump되어져
    메모리에 상주하기 때문이지요...)


    헉헉... 아주아주.. 간단히 설명할려고 했는데..
    뭐가 길어져 버렸네요..
    설명이 미흡한게 아닌가 보여지네요..
    죄송하구요..
    간단한 답변은 되었으리라 생각됩니다..

    잘 구성된 index는 select 효율을 향상시킬 수 있으므로,
    index를 만들기 전 table의 분포도를 잘 확인하셔야만 합니다..