본문 바로가기
데이터베이스

인덱스가 왜 필요했을까?

by 데이널 2024. 5. 13.

데이터베이스를 공부할 때 인데스를 빼놓고는 이야기할 수 없습니다. 데이터베이스에서 성능 최적화라고 할 때에도 인덱스 어떻게 사용할지가 중요하기 때문이죠. 우리는 이 task를 '인덱스 전략을 수립한다'라고 합니다. 이 글에서는 인덱스가  왜 필요했고 어떻게 발전해 왔는지 알아보도록 하겠습니다. 

 

 

인덱스(Index)의 발전 과정

테이블에서 필요한 데이터만 빠르고 효율적으로 액세스하기 위해 사용하는 오브젝트가 필요했습니다. 이 인덱스(Index) 기술은 데이터가 점점 빅(big) 해지면서 빠른 검색이 가능하게 발전하고 있습니다. 데이터가 점점 커지면서 데이터베이스의 발전 과정도 달라졌다고 설명했습니다. 이 부분을 같이 읽어 보시면 인덱스가 왜 필요한지 이해하기 쉬워질 것입니다.. 

 

인덱스의 발전 과정
인덱스의 발전 과정

 

1. Sam File

Sam(sequential access method) 파일은 순차적으로 액세스 할 수 있는 파일을 말합니다. 이 때는 k bytes 정도의 작은 데이터를 많았기 때문에 단지 저장하고 활용하는데 만족했습니다.  

 

2. HDB / VSAM File

VSAM(virual sequential access method) 파일은 인덱스 내 주소를 소프트웨어적으로 처리하는 방식을 사용했습니다. 처음으로 인덱스를 사용하기 시작했습니다. 데이터 용량이 m bytes 단위로 커지면서 빠른 검색에 대한 요구가 생겼습니다. 

 

3. RDBMS

rdbms 데이터베이스가 나오면서 Join 이라는 방법을 사용했습니다. 정규화로 인해 적은 적은 공간에 더 많은 데이터를 저장하는 기술이 발전합니다. 

 

4. Data Warehouse

분석, 통계에 대한 needs가 생기면서 데이터웨어하우스 기술이 발전합니다. 이때 나온 게 column-based 데이터베이스입니다. DW 내부 데이터 처리를 위한 ETL 툴도 출시됩니다. 

 

5. Big Data

빅데이터 시대가 도래하면서 여러가지 기술들이 나옵니다. 하둡, NoSQL 등의 통해 비정형 데이터까지 처리합니다. 하둡 에코시스템의 발전으로 분산파일 처리 기술도 발전합니다. 서버나 스토리지 같은 하드웨어에 미리 데이터베이스 소프트웨어를 장착해 업무에 최적화된 상태에서 판매되는 어플라이언스 DB도 출시됩니다. 

 

 

인덱스의 기능은?

1. 빠른 데이터 검색

인덱스는 데이터베이스 테이블 내에서 특정 데이터 행을 빠르게 찾고 액세스할 수 있는 방법을 제공합니다. 인덱스가 없으면 데이터베이스는 원하는 데이터를 찾기 위해 전체 테이블을 순차적으로 스캔해야 합니다. 이는 특히 대규모 데이터 세트의 경우 매우 비효율적일 수 있습니다. 인덱스를 사용하면 DBMS가 쿼리 기준과 일치하는 행의 하위 집합으로 검색 범위를 좁혀 데이터를 검색하는 데 필요한 시간을 크게 줄일 수 있습니다.


2. 향상된 쿼리 성능

DBMS가 데이터를 보다 효율적으로 찾을 수 있도록 함으로써 인덱스는 데이터베이스 쿼리 성능을 극적으로 향상할 수 있습니다. 여러 테이블을 필터링, 정렬 또는 조인하는 쿼리는 적절한 인덱스가 있으면 도움이 되는 경우가 많습니다. 인덱스가 있으면 DBMS는 관련 행을 신속하게 식별하고 실행 계획을 최적화하여 쿼리 처리 시간을 최소화할 수 있습니다.


3.제약조건

인덱스는 고유성 및 기본 키 제약조건과 같은 제약조건의 역할로도 사용됩니다. unique 인덱스는 테이블의 두 행이 인덱스 된 열에 대해 동일한 값을 가지지 않도록 하는 반면, primary key 인덱스는 테이블의 각 행을 고유하게 식별합니다. 이러한 제약 조건은 데이터 무결성을 유지하고 중복되거나 일관성이 없는 데이터가 데이터베이스에 삽입되는 것을 방지하는 데 도움이 됩니다.


4. 조인 최적화

관계형 데이터베이스에서 조인은 일반적으로 관련 열이나 키를 기반으로 여러 테이블의 데이터를 결합하는 데 사용됩니다. 조인 열의 인덱스는 DBMS가 조인된 테이블에서 일치하는 행을 빠르게 찾을 수 있도록 함으로써 조인 작업의 성능을 크게 향상할 수 있습니다. 이렇게 하면 전체 테이블 스캔의 필요성이 줄어들고 전반적인 쿼리 효율성이 향상됩니다.


5. 정렬(Sort) 기능

인덱스는 쿼리 결과의 효율적인 정렬을 용이하게 할 수도 있습니다. 하나 이상의 열을 기준으로 결과를 정렬하기 위해 쿼리에 ORDER BY 절이 포함된 경우 해당 열의 인덱스는 DBMS가 메모리나 디스크에서 전체 결과 집합을 정렬할 필요를 방지하는 데 도움이 될 수 있습니다. 대신, DBMS는 인덱스를 사용하여 원하는 순서로 데이터를 검색하여 계산 오버헤드를 최소화할 수 있습니다.

 

 

요약하자면, 인덱스는 쿼리 성능 최적화, 제약 조건 적용, 조인 및 정렬 작업 촉진, 동시성 향상을 위해 데이터베이스에 필수적입니다. 인덱스는 데이터에 대한 빠르고 효율적인 액세스를 제공함으로써 데이터베이스 시스템의 응답성, 확장성 및 안정성을 보장하는 데 중요한 역할을 합니다.