SQLPerformanceTuning

  1. Index-Organized Table 혹은 Index-Only access

    • Database는 uniqueness에 필요한 모든 컬럼들이 narrower index에 다 들어있는 경우, narrower index를 wider index보다 선호하는 경향이 있다.

    • 하지만, wider index를 사용하면 index only (즉, table access 없이 index 정보만을 사용하여 값을 가져옴)의 효과를 가져오는 경우가 있다. 이 경우에는 명시적으로 wider index를 사용하여 table access를 줄일 수 있도록 한다.

    • 오러클에는 Index-Organized Table을 사용할 수 있다.

  2. Partitioned table

    • Oracle extension

    • range condition (주로 date column 사용)

    • very large table을 위한 방법

  3. Non-Null check

    • IS NOT NULL 은 index를 사용하지 않음. 정말 필요한 경우는 적당한 range 값 비교를 할 수 있다. (index가 걸려 있는 경우)

      • e.g, ALL_POSITIVE_COLUMN > -1, DATE_COLUMN > TO_DATE('0001/01/01', 'YYYY/MM/DD')

  4. NOT EQUAL check

    • inequality 비교는 index를 사용하지 않음. 정말 필요한 경우는 IN (나머지 모든 경우의 값... 물론 많지 않다면...) 을 사용!

  5. OR 나 IN 리스트 사용 시 주의할 점

    • discrete한 값에 대해 index를 사용하여 range check를 하나, 그렇지 않은 경우에는 index를 사용하지 못한다. 즉, IS NULL 이 포함된 경우 (IS NOT NULL 도 물론)

      • 즉, 다음 경우는 index를 사용하지 않는다. (DB2는 null을 하나의 값으로 보므로 index를 사용한다.)

        • name = 'ABC' OR name is null

  6. Hash join이 Nested loop join보다 유리한 경우

    • smaller row set이 충분히 작아 메모리에 다 올라올 수 있을 때

    • sort merge join을 쓰려고 하는 경우에는 항상 hash join을 쓰는 것이 더 유리할 것이다.

last edited 2008-02-03 13:55:24 by YoonKyungKoo