SSISO Community

시소당

인덱스의 장/단점 과 인덱스의 재구성

인덱스의 장/단점 과 인덱스의 재구성

 

인덱스는 수정이 불가..수정을 할려면..삭제하고 다시 생성해야한다.


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

특정 값을 찾을 때는 넌클러스트 인덱스가 효율적으로 유리하며 범위를 사용한 값을 찾을 때는 클러스트 인덱스가 유리하다.

  • 클러스트 인덱스는 한 테이블에 하나만 가질 수 있다.

일반적으로 PK는 클러스트 인덱스를 기본값으로 적용된다 

하지만 반드시 PK는 클러스트 인덱스를 가져야 한다는 생각을 가지지만 이것으 옳지 않다.


예를들어 사원을 저장하는 테이블에서 사번을 가지고 범위로 찾는것으 드물다. 부서나 이름으로 사원을 찾는 경우가 더 많을 것이다.

이때는 PK 를 넌클러스로 하고 다른것을 클러스트로 사용하는 것이 올바르다.

 

다시말하면..

~where emp_no = '20' : 넌클러스트 인덱스

~where emp_no between 10 and 50  : 클러스트 인덱스


-------------------------------------------------------------------
사용해야할때

1.    테이블행수가많을때
2.    조건절인 where 문에 해당하는 컬럼이 많을때
3.    검색결과가 데이터의 2~4%정도일때
4.    join에 자주 사용되는 커럼
5.    null을 포함하는 컬럼이 많은 경우.

사원테이블에 부서번호 인덱스를 거는것이 좋을까요?   네!좋아용~
1.    테이블의 행수가 10000건이다
2.    쿼리문을 전체 쿼리문들중에서 95% 사용한다.

create index idx_e2_deptno
on e2(deptno);



인덱스의 재생성

1.  
set timing on

2.
alter index idx_e2_deptno rebuild;

인덱스가 변경되었습니다.

경   과: 00:00:00.72


인덱스의 종류

1.   고유인덱스   :중복되지않는
2.   비고유 인텍스   :
3.   단일 인덱스    : 컬럼 하나로만드는것
4.   결합인덱스   :   컬럼이 하나이상으로 만드는것
5.   함수 기반 인덱스

create table d2
as select * from dept;

고유인덱스만들기.
create unique index idx_d2_deptno
on d2(deptno);

결합인덱스    :   복합 컬럼.
create index idx_d2_com
on d2(deptno,dname);


함수기반 인덱스    :   수식, 함수
1.
create table e3
as
select * from emp;

2.
create index idx_e3_annsal
on e3(sal*12);

3.
select index_name,column_name
from user_ind_columns
where table_name='E3';
INDEX_NAME               COLUMN_NAME
-------------------------------------------------
IDX_E3_ANNSAL            SYS_NC00009$

1124 view

4.0 stars