[ Oracle.튜닝-Index ]

 

1. index

    a. 많은 양의 페이지를 읽을 때

         - 본문을 처음부터 끝까지 쭉 읽는 것이 빠를 가능성이 높다.

    b. 적은 양의 페이지를 읽을 때

         1. Step

             색인을 뒤져서 페이지 번호를 찾는다.

         2. Step

             본문의 해당 페이지로 찾아 간다.

 

2. Index 분류

    a. B*Tree Index

    b. Bitmap Index

    c. Reverse Key Index

    d. Descending Index

    e. Function-based Index (FBI)

    f.  Domain indexes Index

 

3. B*Tree Index

    a. 구성요소

        . Root Block  -> Branch Blocks -> Leaf Blocks

    b. Root Block, Branch Blocks

        . 이 2개의 Block에는 data block에 접근하는 자료는 없다.

    c. Leaf Blocks

        . data block에 접근할 수 있는 rowid를 가지고 있다.

        . Leaf Node Block은 서로 양방향으로 연결되어 있다.

   

4. rowid

    a. 구성 : Object ID + File Number + Block Number + Row 위치 (Block내)

 

5. 결합인덱스

    a. 선행컬럼 선정순서

        1. 조건절에서 해당 컬럼이 항상 사용되는가

        2. 조건절에서 항상 '='로 사용되는가

        3. 컬럼의 분포도가 좋은가

        4. 정렬(sort)를 대신 할 수 있는가

        * 즉, index 컬럼 순서는 분포도 보다 '=' 검색이 더 우선 순위가 더 높다.

    b. 후행컬럼 선정기준

         1. 범위연산자로 조회되는 경우 (Between)

    c. 예제

         1. 만약, 급여테이블이 존재 할 때

             급여년월 + 사원번호 + 급여액   이라는 index가 존재 할 때 적절한지 파악해보면

             ; 급여년월은 주로 '=' 로 검색하고

             ; 사원번호, 급여액은 between 으로 검색하기에 적절하게 된다.

         2.

    c. 실행계획

        1. INDEX SKIP SCAN

            . A + B + C 에 대한 index가 존재 할 때

              where B = '12' AND C = '가가'; 로만 조건절에 적용시 11g 부터 적용될 실행계획임

            . 첫 번째 선행컬럼(A)의 데이터 분포도가 나쁘고 (고유한 값이 작고 중복된 값이 많은 경우)

            . 두 번재 선행컬럼(B)의 데이터 분포도가 좋은 경우 (고유값이 많고 중복이 적은 경우)

            . skip의 효과가 좋은 것이지, 모든 경우에 효율성이 좋은 것은 아님

 

6. 인덱스를 사용하지 못하는 경우

    a. 인덱스 사용이 비효율적인 경우

    b. 비교가 불가능한 경우

 

7. 인덱스와 힌트

    a. INDEX ~ 특정 인덱스를 사용하도록 유도하는 힌트

        . SELECT /*+ INDEX(emp_large EMP_IDX01) */ ..

    b. INDEX_ASC ~ 인덱스를 오름차순으로 접근하도록 하는 힌트

        . SELECT /*+ INDEX_ASC(emp_large EMP_PK) */ ..

    c. INDEX_DESC ~ 인덱스를 내림차순으로 접근하도록 하는 힌트

        . SELECT /*+ INDEX_DESC(emp_large EMP_PK) */ ..

 

8. Function-based Index (FBI)

    a. Index가 걸려 있는 컬럼에 계산식이나 함수가 사용되는 경우에는 Index를 사용할 수 없음

    b. FBI는 컬럼에 계산식이나 함수를 적용하여 자주 조회를 하는 경우에 사용가능

 

 

10. 용어

      a. 분포도가 좋다.

          . 고유한 값이 많다.

          . 데이터 처리 범위가 좁다.

          . 처리 일량이 적다

      b. 분포도가 나쁘다.

          . 중복된 값이 많다.

          . 데이터 처리 범위가 넓다

          . 처리 일량이 많다.

 

Posted by 농부지기
,