오라클 인덱스 index

반응형



 

테이블 복사를 이용한 새로운 테이블 만들기

- 테이블의 이름이 중복되지 않아야 한다.

- 원본 테이블의 인덱스는 복사되지 않는다.

- Null과 not Null의 제약사항만 복사되며 다른 제약사항들은 복사되지 않는다.

- Long 타입은 복사되지 않는다.

 

구문형식

CREATE TABLE 스키마명.테이블명 AS  //스키마명 = 소유자

SELECT 컬럼리스트

FROM 원본테이블명;

 

실습

--------------------------------------------------------------------  

CREATE TABLE table_copy AS

SELECT *

FROM EMPLOYEES;

-------------------------------------------------------------------- 


확인 

-------------------------------------------------------------------- 

select * from table_copy;

select * from employees;

-------------------------------------------------------------------- 


변경 ( Alter ) // 삭제 ( drop )

 


 

인덱스에 대해서


 테이블에 저장된 데이터를 빠르게 검색할 수 있도록 하기위한 기능 즉 SQL 명령문의 처리 속도를 향상시키기 위해 컴럼에 생성하는 오라클 객체를 말한다.

 데이터가 많을 경우 순차접근에 의한 검색보다 우수하다.

 인덱스 컬럼값과 ROWID 정보를 담고 있는 인덱스 정보는 별도로 저장된다.

 해당 컬럼에 저장된 정보를 정렬한 뒤 이 값과 ROWID 값을 저장하며 인덱스 정보를 먼저 검색한 인덱스 정보를 통해 실제 테이블에 있는 데이터를 검색한다.

 인덱스의 지정이 모든 조건에 빠른 결과를 보장하지는 않는다.

 테이블의 자료가 많지 않거나, 자주 사용되는 컬럼이 아니며, 검색의 결과가 많은 경우, 입력과 수정, 삭제 작업이 많은 경우는 인덱스의 지정이 장애요인이 될 수 있다.

 참고 : 카디널이 낮은 컬럼의 경우는 인덱스를 지정하지 않는다. 해당 컬럼에 입력될 수 있는 정보의 범위가 낮다(예 : 남자, 여자만 입력되는 경우)

 

인덱스의 장점

일반적으로 검색 속도가 빠르다.=> 시스템의 부하를 줄여서 시스템의 전체 성능을 향상시킨다.


인덱스의 단점

인덱스를 위한 추가 공간이 필요하다. 인덱스를 생성하는 데 시간이 걸린다.

(데이터의 변경작업이 자주 일어날 때는 성능 저하를 가져온다)

 

 

구문형식

CREATE [UNIQUE] INDEX ["스키마명"]."인덱스명" ON

["스키마명"]."테이블명" ("컬럼명1", "컬럼명2", "컬럼명3"....);

 

단일 인덱스 : 인덱스를 구성하는 컬럼이 하나인 인덱스

-------------------------------------------------------------------- 

CREATE INDEX "EMP_DEPARTMENT_IX" ON "EMPLOYEES" ("DEPARTMENT_ID");

-------------------------------------------------------------------- 

 

단일 유니큐 인덱스: 인덱스를 구성하는 컬럼이 하나이며 해당 컬럼의 자료는 중복되지 않는 인덱스이다.

-------------------------------------------------------------------- 

CREATE UNIQUE INDEX ."EMP_EMAIL_UK" ON ."EMPLOYEES" ("EMAIL");

-------------------------------------------------------------------- 


유니큐 인덱스는 해당 컬럼에 입력되는 값은 유일해야 한다.

기본키, UNIQUE 제약조건을 설정할 경우 자동으로 인덱스가 생성(자동인덱스)된다.

이때 생성된 인덱스의 이름은 제약조건 생성시 만들어준 이름과 동일하다.

서로 다른 객체영역에 저장되기 때문에 이름이 중복되지 않는다.


복합 인덱스: 여러개의 컬럼이 모여서 하나의 인덱스를 구성한다.

INDEX "HR"."EMP_NAME_IX" ON "HR"."EMPLOYEES" ("LAST_NAME", "FIRST_NAME");

 

복합인덱스를 유니큐 인덱스로 구성할 경우 단일 컬럼에서 중복된 값이 존재할 수는 있으나 인덱스를 구성하는 복합적인 컬럼에서는 중복된 값을 가질 수 없다.

복합 인덱스를 구성했을 경우 Where 구문에서 인덱스의 순서대로 조건을 명시한다.

 

인덱스의 재구성

ALTER INDEX [소유자].인덱스이름 REBUILD;

 

인덱스 이름 바꾸기

ALTER INDEX index_name RENAME TO new_index_name;

 

인덱스 삭제

DROP INDEX [소유자].인덱스이름;

 

인덱스 확인(인덱스 객체 정보 조회) : USER_IND_COLUMNS(인덱스 정보 데이터 딕셔너리 뷰)

- select * from user_ind_columns;

- select index_name, column_name from user_ind_columns where table_name='EMPLOYEES';


반응형