#acl YoonKyungKoo:read,write All:read 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을 사용할 수 있다. 1. Partitioned table * Oracle extension * range condition (주로 date column 사용) * very large table을 위한 방법 1. 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')''' 1. NOT EQUAL check * inequality 비교는 index를 사용하지 않음. 정말 필요한 경우는 '''IN (나머지 모든 경우의 값... 물론 많지 않다면...)''' 을 사용! 1. OR 나 IN 리스트 사용 시 주의할 점 * discrete한 값에 대해 index를 사용하여 range check를 하나, 그렇지 않은 경우에는 index를 사용하지 못한다. 즉, IS NULL 이 포함된 경우 (IS NOT NULL 도 물론) * 즉, 다음 경우는 index를 사용하지 않는다. (DB2는 null을 하나의 값으로 보므로 index를 사용한다.) * name = 'ABC' OR name is null 1. Hash join이 Nested loop join보다 유리한 경우 * smaller row set이 충분히 작아 메모리에 다 올라올 수 있을 때 * sort merge join을 쓰려고 하는 경우에는 항상 hash join을 쓰는 것이 더 유리할 것이다.