[ dataBase ] in KIDS 글 쓴 이(By): archim (arch-angel) 날 짜 (Date): 2000년 2월 8일 화요일 오후 02시 17분 56초 제 목(Title): Re: [Q] index?? 테이블과 같은 하나의 오브젝트로 존재합니다 책에서 원하는 곳을 빨리 찾고자 할때 쓰이는 인덱스 페이지와 같은 역할을 하지요 그러니까 테이블내에 어떤 값을 찾고자 할때 테이블 전체를 뒤지지 않고 인덱스를 통해서 찾아진 일정 범위만 스캔하게 되는 겁니다 아마도 .. 가물가물 .. rowid와 key값으로 설정이 되어 있을것 .. 같은데 .. query를 날리면 옵티마이저가 조회 순서를 결정 하게 되는데 이때 테이블에 인덱스가 걸려 있으면 인덱스 먼저 뒤지게 되요 예를 들어 '년도'에 인덱스가 걸려있고 where 년도 = '1999' and 월 = '12' 이라면, 인덱스를 뒤져 년도가 '1999'인 row들만 찾아서 (rowid 사용?), 실제 테이블에는 년도가 '1999'인 항목만 스캔하게 되는 겁니다 테이블 delete,update시 인덱스도 같이 d,u되며 연도,날짜로 인덱스를 설정해 놓았을 경우 연도,날짜순으로 저장이 되어있기 때문에 인덱스 d,u 작업도 만만치 않지요 (순서가 중요함 ) 또, 인덱스는 리딩컬럼을 위주로 찾기 때문에 연도,날짜의 순이라면 반드시 년도가 있어야 인덱스를 타게 됩니다 query에서 강제로 인덱스를 타도록 만들려면 Hint를 주어야 합니다 select /* Hint */ a from ... where ... 인덱스 생성은 creat index 으로 이루어 지고 이때 테이블 스페이스는 테이블과 따로 두는 것이 좋다고 합니다. 둘이 같은 곳에 위치하면 스캔시에 부하가 많이 걸리겠지요 참고로 .. 7백만건 정도의 테이블에 인덱스를 걸려면 한 2시간 정도 걸렸던 것 같습니다. 물론 다른 작업과 같이 해서 그렇기도 하겠지만 인덱스 만들고 지우는 작업도 만만치 않더라구요 하다가 실패하면( 듀블리케이트라도 나면 ) 첨부터 다시해야 하는 경우도 있구요 .. 주절주절 .. 죄송합니다 |