10.1 인덱스(Index)

출처 URL : http://www.gurubee.net/lecture/1035

인덱스는 테이블이나 클러스트에서 쓰여지는 선택적인 객체로서, 오라클 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조이다.

– 자동 인덱스 : 프라이머리 키 또는 UINQUE 제한 규칙에 의해 자동적으로 생성되는 인덱스.

– 수동 인덱스 : CREATE INDEX 명령을 실행해서 만드는 인덱스

https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-7746436232991148&output=html&h=15&slotname=8379695082&adk=1182798888&adf=362109348&pi=t.ma~as.8379695082&w=468&lmt=1687321360&url=http%3A%2F%2Fwww.gurubee.net%2Flecture%2F1035&wgl=1&dt=1687321360027&bpp=4&bdt=35&idt=66&shv=r20230614&mjsv=m202306080101&ptt=5&saldr=sa&abxe=1&cookie=ID%3D132b99f76c846f1d-2280e91906dd00ab%3AT%3D1680829923%3ART%3D1687321164%3AS%3DALNI_MaoDEtzkBV17wrroWb3_ZBisy7yKg&gpic=UID%3D00000bedaaad15ec%3AT%3D1680829923%3ART%3D1687321164%3AS%3DALNI_MbSjwUbKLl-ARHi-BgUs6yrivBVog&prev_fmts=693×90%2C647x90%2C120x600&correlator=1723312924040&frm=20&pv=1&ga_vid=1581130283.1687247601&ga_sid=1687321360&ga_hid=592070834&ga_fc=1&u_tz=540&u_his=50&u_h=1067&u_w=1707&u_ah=1019&u_aw=1707&u_cd=24&u_sd=1.5&adx=61&ady=1009&biw=693&bih=900&scr_x=0&scr_y=0&eid=44759876%2C44759927%2C44759837%2C44788442&oid=2&pvsid=472503849917063&tmod=662380488&uas=0&nvt=1&ref=http%3A%2F%2Fwww.gurubee.net%2Foracle%2Fsql&fc=640&brdim=-725%2C0%2C-725%2C0%2C1707%2C0%2C724%2C1019%2C710%2C900&vis=1&rsz=%7C%7Cebr%7C&abl=CS&pfx=0&fu=0&bc=23&ifi=2&uci=a!2&btvi=2&fsb=1&xpc=2kzVmyMYrY&p=http%3A//www.gurubee.net&dtd=104
인덱스를 생성하는 것이 좋은 컬럼
  • ① WHERE절이나 join조건 안에서 자주 사용되는 컬럼
  • ② null 값이 많이 포함되어 있는 컬럼
  • ③ WHERE절이나 join조건에서 자주 사용되는 두 개이상의 컬럼들
다음과 같은 경우에는 인덱스 생성이 불필요 하다.
  • ① 테이블이 작을 때
  • ② 테이블이 자주 갱신될 때

오라클 인덱스는 B-tree(binary search tree)에 대한 원리를 기반으로 하고 있다. B-tree 인덱스는 컬럼안에 독특한 데이터가 많을 때 가장 좋은 효과를 낸다.

이 알고리즘 원리는
① 주어진 값을 리스트의 중간점에 있는 값과 비교한다.만약 그 값이 더 크면 리스트의 아래쪽 반을 버린다. 만약 그 값이 더 작다면 위쪽 반을 버린다.
② 하나의 값이 발견될 때 까지 또는 리스트가 끝날 때까지 그와 같은 작업을 다른 반쪽에도 반복한다.

비트맵 인덱스

비트맵 인덱스는 각 컬럼에 대해 적은 개수의 독특한 값이 있을 경우에 사용하는 것이 좋다.(ex 남,여의 값을 가지는 성별 컬럼)

비트맵 인덱스는 B-tree 인덱스가 사용되지 않을 경우에서 성능을 향상 시킨다.

테이블이 매우 크거나 수정/변경이 잘 일어나지 않는 경우에 사용할수 있다.

 
SQL> CREATE BITMAP INDEX emp_deptno_indx 
     ON emp(deptno); 
    

UNIQUE 인덱스

UNIQUE 인덱스는 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있다.

프라이머리키 와 UNIQUE 제약 조건시 생성되는 인덱스는 UNIQUE 인덱스이다.

 
SQL> CREATE UNIQUE INDEX emp_ename_indx 
     ON emp(ename); 
    

NON-UNIQUE 인덱스

NON-UNIQUE 인덱스는 인덱스를 사용한 컬럼에 중복 데이터 값을 가질수 있다.

 
SQL> CREATE INDEX  dept_dname_indx 
     ON dept(dname);
    

결합 인덱스

복수개의 컬럼에 생성할 수 있으며 복수키 인덱스가 가질수 있는 최대 컬럼값은 16개 이다

 
SQL> CREATE UNIQUE INDEX emp_empno_ename_indx 
     ON emp(empno, ename);     
    

인덱스의 삭제

인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는 테이블의 데이터에는 아무런 영향도 미치지 않는다.

인덱스를 삭제하려면 인덱스의 소유자 이거나 DROP ANY INDEX권한을 가지고 있어야 한다.

인덱스는 ALTER를 할 수 없다.

 
SQL> DROP INDEX emp_empno_ename_indx; 
    

인덱스 데이터사전

인덱스에 대한 정보는 USER_INDEXES 뷰 또는 USER_IND_COLUMNS뷰를 통해 검색할 수 있다.

 
SQL> SELECT index_name, index_type 
     FROM USER_INDEXES 
     WHERE table_name='EMP'; 

INDEX_NAME              INDEX_TYPE
-------------------     -----------
EMP_DEPTNO_INDX         BITMAP
EMP_PK_EMPNO            NORMAL    
    

인덱스에 대한 자세한 강좌는 어드민 강좌를 참고해 주세요 ^^


답글 남기기 0

Your email address will not be published. Required fields are marked *