택시짱의 개발 노트

Database 인덱스(index)가 뭐지..? 본문

SQL

Database 인덱스(index)가 뭐지..?

택시짱 2022. 2. 24. 18:04

인덱스란(index)?

인덱스는 쿼리 속도를 높이기 위해 데이터베이스의 백그라운드에서 사용되는 강력한 도구이다. 요청된 데이터를 빠르게 조회하는 방법을 제공하여 쿼리를 인덱싱 한다. 데이터 베이스의 인덱스는 책 뒷면의 색인과 매우 유사 하다.
인덱싱은 여러 필드에서 여러 레코드(record)를 정렬하는 방법이다. 테이블의 필드에 인덱스를 생성하면 필드 값과 관련된 레코드에 대한 포인터를 보유하는 또 다른 데이터 구조가 생성된다. 그런 다음 인덱스 구조가 정렬되어 이에 대한 이진 검색( 시간 복잡도 O(longN) )을 수행할 수 있다.

 

쿼리(query) 실행시

SELECT * FROM Employee
WHERE Employee_Name = 'Abc'

인덱스 없이 쿼리 실행시

데이터베이스 소프트웨어는 말 그대로 Employee 테이블의 모든 단일행을 살펴보고 해당 행의 Employee_Name이 'Abc'인지 확인 한다. 그리고 우리가 검색하고자 하는 'Abc'라는 이름을 가진 다른 행이 있을 수 있기 때문에 Employee_Name에서 'Abc'의 검색을 멈출 수가 없다. 따라서 마지막 행까지 모든 행을 검색 해야 한다. 이것을 full table scan이라고 한다.

인덱스가 데이터베이스의 성능에 도움이 되는 방법

인덱스를 사용하는 본질적인 요점은 원하는 데이터를 얻기 위해 검색해야 하는 테이블의 레코드/행 수를 줄임으로써 검색 쿼리의 속도를 높이는 것이다. 인덱스는 테이블의 특정 열에 대한 값을 저장하는 데이터구조이다.(대표적으로 B-Tree)

인덱스를 언제 사용해야 할까?

SELECT * FROM Employee WHERE Employee_Name = 'Abc'와 같은 query가 실행되면 데이터베이스는 query중인 열에 인덱스가 있는지 확인한다. Employee_Name 열에 생성된 index가 있다고 가정하면 데이터베이스는 index를 사용하여 검색되는 값을 찾는다.
일반적으로 indexing된 열의 데이터가 자주 query되는 경우에만 테이블에 index를 생성해야 한다.

 

인덱스 생성시 단점 및 주의 사항

insert, update, delete가 빈번하게 발생하는 colmun에는 사용하지 않는게 좋다.

출처: https://hyeounstory.tistory.com/94

이미 인덱스가 존재하는 column에 데이터를 Insert를 하게 되면, index의 정렬이 깨지게 되고, 그러면 인덱스 분리 현상을 통해 데이터를 insert하게 된다. 
인덱스도 별도의 추가 공간을 필요로 한다 (DB의 10퍼센트 내외의 공간이 추가로 필요)
인덱스를 생성하는데 시간이 많이 소요될 수 있다.

 

 

 

 

아래의 사이트를 참고 하였습니다~

https://stackoverflow.com/questions/1108/how-does-database-indexing-work

 

How does database indexing work?

Given that indexing is so important as your data set increases in size, can someone explain how indexing works at a database-agnostic level? For information on queries to index a field, check out ...

stackoverflow.com

 

반응형
Comments