개발 창고/Database

[SQL] Index란 무엇인가? - 개념편

로이제로 2020. 11. 9. 18:07
반응형

 먼저 안내하자면, DBA수준의 지식이 아니기 때문에 INDEX에 대해 깊게 이야기하는 건 조금 어려울 수 있지만, 개발자 입장에서 이해하고 가면 좋을 정도를 기술해볼까 합니다. (원래는 오라클의 INDEX 사용법에 대해 먼저 기술하려 했지만, 그전에 가볍게 건들고 가도 좋을 것 같아 작성된 내용이므로 그냥 가볍게 봐주셨으면 합니다.)

 

  INDEX란?

 흔히 책을 펼치면 두 가지 인덱스를 마주하게 됩니다. 첫 번째는 목차, 두 번째는 책의 마지막에 나오는 용어별 페이지 쪽수 (주로 전공서 등에 있음)로 나눠 볼 수 있습니다. 첫 번째의 경우 주제별로 우리가 페이지를 찾아가기 쉽게 하고, 두 번째의 경우 용어별로 원하는 페이지를 찾기 쉽게 합니다.

 

페이지 목차의 예시

 이처럼 인덱스란, 데이터(책 페이지)를 쉽게 찾을 수 있도록 정의된 페이지라고 보시면 됩니다.

 

인덱스(영어: index)는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다. 인덱스는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다. 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다. 인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다. (왜냐하면 보통 인덱스는 키-필드만 갖고 있고, 테이블의 다른 세부 항목들은 갖고 있지 않기 때문이다.) 관계형 데이터베이스에서는 인덱스는 테이블 부분에 대한 하나의 사본이다.

- 위키피디아 '인덱스 (데이터베이스)'

 

일반적으로 개발자들은 데이터베이스에게 3가지를 데이터베이스에 바라게 됩니다.

 

1. 데이터가 잘 저장되어야 한다.

2. 저장된 데이터가 안정적이어야 한다.

3. 저장된 데이터가 잘 활용되어야 한다.

 

더보기

<사족>

 저장이 잘 안 되고 저장된 데이터가 누수되거나 깨진다면 저장에 이유가 없을 것이고, 이 저장되는 데이터에 목적이 없다면 이는 단순히 휴지통에 넣는 쓰레기일 뿐일 겁니다.

 

 인덱스의 목적은 이 중에서 3번의 효율을 더 높여주는 검색 속도에 있습니다.

 

 만약 내가 자주 검색하는 순서가 있다면(ex. 이름순, 가격순 등), 이를 데이터베이스에 "이 기준으로 인덱스를 적용해주세요."라고 해두면, 데이터베이스는 데이터가 저장되거나 삭제, 수정될 때 또는 그 이외에 지정된 시점에 요청한 기준대로 목차 페이지를 따로 만들어둡니다. 그리고 우리가 Select문을 호출하면 목차를 뒤져 맞는 목차가 있는지 확인하여 해당 목차대로 데이터를 찾아 보여줍니다.

 

인덱스 생성의 예

 

반응형