Index
- index = 주소록 (보조 기억장치에 데이터가 위치한 곳을 정리해 놓은 데이터의 주소록)
- 데이터를 관리하기 위한 목적으로 index를 만듦 (SQL 처리가 빨라지는 것은 부수적인 이득)
- where 조건절에 나오는 컬럼을 위주로 index를 작성한다.
- index를 생성하기 위해 먼저 시스템이 데이터 보호를 위해 lock을 하고 full scan을 한다.
이 때, 시스템에 부하가 높아지므로 데이터를 활용하지 않는 시간에 index를 작성하는게 바람직하다.
- index를 생성하는 과정 ; lock -> full scan -> sort -> block 기록 -> unlock
- 데이터 삽입시 index split으로 DML의 속도 저하
데이터의 추가시에 index도 업데이트를 해야 하며 이 과정에 index split이 발생
따라서 index가 많을 경우, 데이터 변경시에 index 업데이트로 인해 시스템에 부하가 많아짐
- 데이터 삭제시 테이블의 데이터는 지워지지만 index에는 데이터가 지워지지 않고
사용하지 않는 데이터로 표시되어 그대로 남아서 성능이 저하됨 => index rebuild를 해서 정리해줘야함
- index는 검색된 데이터의 블록이 많더라도 한번에 한 블록씩만 메모리로 불러들인다.
=> 총 데이터의 5% 미만일 경우에만 index의 성능이 좋다.
- index를 이용할 때, 보조 기억장치에서 한번에 읽어들이는 데이터의 양보다
데이터의 블록을 읽어들이기 위해 보조 기억장치를 액세스하는 횟수가 쿼리의 성능을 좌우한다.
- 따라서 전체 데이터 블록의 5% 이상의 횟수로 보조 기억장치의 블록을 액세스할 경우,
오라클의 optimizer는 인덱스를 사용하는 것이 비효율적이라고 판단하여 바로 보조기억장치를 검색함
- unique index는 내용이 중복되지 않으므로 사용하기 좋음 ; unique한 컬럼만 unique index로 지정할 수 있음
- 결합 index의 배합에 따라 index의 성능이 좌우됨
- descending index는 내림차순으로 정리함 ; max함수나 최근의 내용을 우선으로 검색할 때 좋음 (큰 값, 날짜별)
- index가 설정된 상태에서는 where로 검색할 때 index가 된 컬럼에 다른 함수는 지정하지 않는다.
대신 함수를 지정해야할 경우에는 함수 기반 인덱스를 지정한다.
'Oracle > SQL & PL/SQL' 카테고리의 다른 글
Subquery (0) | 2010.04.06 |
---|---|
View (0) | 2010.02.18 |
데이터 무결성 제약조건 (0) | 2010.02.17 |
DDL (0) | 2010.02.17 |
DML (0) | 2010.02.12 |