티스토리 뷰

Development/면접질문

Index란?

김드랍 2017. 6. 30. 00:39

Index

1) 의미 & 생성 방법

- RDBMS에서 검색속도를 높이기 위해 사용하는 기술

- 색인 이라는 뜻

- 자동생성 : Primary key 나 제약조건을 정의할 경우 Unique Index가 자동으로 생성됨


2) 원리

- 해당 TABLE의 컬럼을 색인화 하여 검색시 해당 TABLE의 레코드를 FULL SCAN 하는것이 아니라 색인화 되어있는    Index파일을 검색하여 검색속도를 증가

- 보통 Tree구조로 색인화 (RDBMS에서 사용하는 Index는 Balanced Search Tree 사용, RDBMS에서 사용되    는 B-Tree는 B-Tree에서 파생된 B+ Tree를 사용)

- 참고로 Oralce이나 MSSQL에서는 여러종류의 Tree를 선택하여 사용가능

- MYI에 해당 컬럼을 색인화 하여 저장

- User가 SELECT 쿼리로 INDEX가 사용하는 쿼리를 사용시 해당 TABLE을 검색하는것이 아니라 빠른 TREE롤 정    리해둔 MYI파일의 내용을 검색합니다


3) 장점

- 키 값을 기초로 하여 테이블에서 검색과 정렬 속도를 향상 시킴

- 질의나 보고서에서 그룹화 작업의 속도를 향상시킴

- 인덱스를 사용하면 테이블 행의 고유성 강화

- 테이블의 기본 키는 자동으로 인덱스 됨

- 필드 중에는 데이터 형식 때문에 인덱스 될수 없는 필드도 존재

- 여러 필드로 이루어진 인덱스를 사용하면 첫 필드 값이 같은 레코드도 구분 가능

( 액세스에서 다중 필드 인덱스는 최대 10개의 필드 포함가능 )


4) 단점

- 인덱스를 만들면 .mdb 파일 크기가 증가

- DML 성능 저하

- 여러 사용자 응용 프로그램에서의 동시 수정할수 있는 병행성 감소

- 인덱스 된 필드에서 데이터를 업데이트 하거나 , 레코드를 추가 또는 삭제할 때 성능이 감소

- 인덱스가 데이터베이스 공간을 차지해 추가적인 공간이 필요

- 데이터 변경 작업이 자주 일어날 경우, 인덱스를 재작성 해야 할 필요가 있을수 있기에 성능에 영향을 미침

 

5) 목적

- RDBMS의 검색 속도의 증가

- SELECT 쿼리의 WHERE절이나 JOIN 예약어를 사용했을때만 인덱스를 사용되며 SELECT 쿼리의 검색 속도 증가



6) 종류

1. Oracle

- Bitmap 

- FunctionBased

- 확인 

USER_INDEXS : 테이블의 인덱스 정보

USER_IND_COLUMNS : 각 인덱스의 컬럼정보

2. MySQL

- FullText

- Spatial

- 확인 SHOW INDEX FROM TABLE_NAME

3. SQL Server 

- 클러스터형 인덱스(Clustered Index)

 : 지정한 열에 대해 내용자체가 정렬되어 있다. 한테이블에 한 개만 생성가능

   ex) CREATE TABLE EMPLOYEE(

EMPLOYEE_ID VARCHAR(10) NOT NULL PRIMARY KEY,

EMPLOYEE_NAME VARCHAR(20),

DEPARTMENT VARCHAR(20),

. . . . . . .

);



- 비클러스터형 인덱스(Nonclustered Index)

: 테이블에 여러개 생성할수 있다. 자동정렬 되지 않는다

   ex) CREATE TABLE EMPLOYEE(

EMPLOYEE_ID VARCHAR(10) NOT NULL PRIMARY KEY NONCLUSTERED,

EMPLOYEE_NAME VARCHAR(20),

DEPARTMENT VARCHAR(20),

. . . . . . .

);


- 확인 SP_HELPINDEX : 테이블 명, 컬럼명



7) 제약 조건없이 테이블을 생성할 때는 인덱스를 생성할 수 없음

- 인덱스가 자동 생성되는 제약조건은 Primary key 와 Unique 뿐이다

   (Primary key와 Unique는 중복되지 않으므로 클러스터 인덱스로 설정할 수 있다)

1. Primary key 생성 시

2. Primary key 와 Unique 동시 생성 시

3. Primary key를 비클러스터형으로 생성 시

4. Unique에 클러스터형 인덱스 생성

5. Primary key가 아닌 다른 열(Column)에 클러스터형 인덱스 지정



8) 정리

인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다.

인덱스는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다.

고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다.

인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다.


데이터베이스에서 테이블과 클러스터에 연관되어 독립적인 저장 공간을 보유하고 있는 객체(object)이다. 

사용자는 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위하여 인덱스를 생성하고 사용한다. 


DB에서 자료를 검색하는 두 가지 방법

FTS(Full Table Scan) : 테이블을 처음 부터 끝까지 검색하는 방법

Index Scan : 인덱스를 검색하여 해당 자료의 테이블을 액세스 하는 방법.


9) Tip

- 클러스터형 인덱스는 자동으로 정렬을 한다. 따라서 많은 데이터가 저장돼 있는 상태에서 ALTER문을 통해 클러스터형 인덱스를 추가시킨다면 많은 데이터를 정렬하기 위해 많은 리소스를 차지하게 된다 따라서 함부로 인덱스를 걸지 않도록!

'Development > 면접질문' 카테고리의 다른 글

Heap영역 & Stack영역  (2) 2018.01.18
프로세스와 쓰레드의 차이  (0) 2017.12.08
댓글