C. Oracle

oracle 인덱스 INDEX

sfeg 2018. 1. 18. 21:26

인덱스(INDEX)        => 색인과 같음, 빨리 select를 위해 존재

                                        ex) select deptno ,rowid, rownum  from dept;       
                                            -> rowid: row의 고유한 주소(6자3자6자3자 끈어서..),  rownum: row의 순번
 
 
1. index
   .테이블 구성은 다음과 같다. 그래서 select시 다음을 참고하여 select한다.
     - index                 
     - 가나다...
     - 특정 column의 value
     - ROWID    
 
  . index구성은 다음과 같다.
     - 특정 column의 value
     - ROWID
 
   . sql구문중에 가장 빠른 구문이 rowid 검색이다.
     ex) select deptno,rowid  from dept where rowid='AAAHZpAABAAAMUaAAV';
 
 
 
2. index를 만들기  
   .인덱스를 많이 만들면 DML의 속도는 저하된다. 그러므로 자주사용하는것만 한정적으로 만든다.
 
 
   . index 만들면 좋은경우
      => 테이블과 ROW가 큰경우,  where조건을 자주 사용하는경우, JOIN조건으로 자주 사용하는경우,
            NULL을 포함하는경우(index에서는 null에대한 정보는 저장하지 않는다.),데이타의 분포도가
            고른경우
 
     index 만들면 안좋은경우    
      => 테이블이 작은경우, where조건사용 안하는경우,join조건을 사용안하는경우
 
 
   .자동으로 만드는경우         
     => PK, UK 
    => pk,uk제약을 지우면 자동으로 삭제된다.

    수동으로 만드는 경우                           
      create index  인덱스명
      on  테이블명(컬럼명);
      ex) create index idx_emp_ename on emp(ename);
 
 
3. index삭제:  단, 자동으로 만든 index는 임의적으로 삭제할수 없다.
    drop  index  인덱스 이름;
    ex) drop  index  idx_emp_ename;
 
 
4. index보기
   desc  user_indexes
   select  index_name,index_type  from user_indexes;
 
   ps. INDEX_TYPE 중
         NORMAL : B*TREE구조 (데이타 베이스에서는 균형잡힌 TREE를 B*TREE라고 한다.)