개발놀이터

데이터베이스 인덱스 본문

CS 지식/데이터베이스

데이터베이스 인덱스

마늘냄새폴폴 2022. 12. 15. 12:04

DB를 사용하면서 데이터의 양에 다라 실행 결과의 속도가 차이가 납니다. JOIN이나 서브 쿼리 사용 시 곱 연산이 일어나 데이터 양이 증가하기 때문에 WHERE 조건에 필요한 데이터만 추출 후 사용하는 것이 좋다고 합니다. 

 

쿼리의 성능을 높이는데 중요한 것은 인덱스를 적재적소에 사용하는 것입니다. 그렇다면 인덱스란 무엇인지 구조는 어떻게 되는지 사용시 장단점은 무엇인지 등에 대해 지금부터 포스팅 해보도록 하겠습니다. 

 

인덱스

인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 

 

여기서 중요한건 '검색 속도'를 향상시키기 위한 자료구조라는 것입니다. 그럼 다른 연산은 향상이 안되는건가? 꼭 그렇지만은 않습니다. 향상은 되지만 추가적인 연산이 필요하다는 점 외에는 다른 연산도 충분히 활용할 수 있습니다. 

 

하지만 추가적인 연산이 들어가기 때문에 오버헤드가 발생할 수 있어서 웬만하면 INSERT, UPDATE, DELETE와 같은 DML을 사용할 때는 가급적 지양하는 것이 좋습니다. 인덱스는 SELECT 쿼리를 날릴 때의 효율을 극대화 한것이기 때문이죠

 

인덱스 사용 시 추가연산

  • INSERT : 새로운 데이터에 대한 인덱스를 추가함
  • DELETE : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
  • UPDATE : 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함

 

이제 인덱스를 사용하면 어떠한 이점이 있고 단점은 어떤것인지에 대해서 알아보도록 하겠습니다. 

 

장점

조건 검색 WHERE 절의 효율성

WHERE 절의 원리는 WHERE 절이 들어간 조건에 맞는 데이터를 검색하기 위해서 1행부터 마지막 행까지 모든 데이터를 확인하게 됩니다. 이것을 '풀 테이블 스캔' 줄여서 '풀 스캔' 이라고 부릅니다.

 

이 때 인덱스를 활용한다면 인덱스 테이블은 데이터들이 정렬되어 저장되어 있기 때문에 해당 조건에 맞는 데이터를 빠르게 찾아낼 수 있습니다. 

 

정렬 ORDER BY 절의 효율성

인덱스를 사용하면 ORDER BY에 의한 정렬 과정을 피할 수 있습니다. ORDER BY는 부하가 굉장히 많이 걸리는 작업입니다. 정렬과 동시에 1차적으로 메모리에서 정렬이 이루어지고 메모리보다 큰 작업이 필요하다면 추가적인 I/O 도 발생되기 때문입니다. 

 

하지만 인덱스를 사용하면 이러한 자원의 소모 없이도 정렬을 할 수 있습니다. 왜냐하면 이미 정렬이 되어있기 때문에 가져오기만 하면 되기 때문입니다. 

 

MIN, MAX의 효율적인 처리 가능

이것 또한 데이터가 정렬되어 있기 때문에 가능한 장점입니다. MIN값과 MAX값을 레코드의 시작 값과 끝 값 한 건씩만 가져오면 되기 때문에 풀 스캔으로 테이블을 모두 뒤져서 작업하는 것보다 훨씬 효율적으로 찾을 수 있습니다. 

 

 

단점

인덱스는 DML에 취약

위에서 언급했듯이 인덱스 테이블 내에 있는 값들에 대해 추가적인 연산이 필요합니다. 그렇기 때문에 조회가 자주 일어나는 테이블에 대해서만 인덱스를 사용하는 것이 좋습니다. 

 

데이터베이스의 저장공간 차지

인덱스를 관리하기 위해 데이터베이스의 약 10퍼센트에 해당하는 저장공간이 필요합니다. 따라서 데이터가 많으면 많을수록 인덱스의 장점을 크게 받지만 데이터가 적은 경우 풀 스캔도 속도가 충분히 나오기 때문에 무조건 인덱스를 사용하는 것은 좋지 못합니다. 

 

 

여기까지 데이터베이스 인덱스에 대해서 알아봤습니다. CS 공부는 처음이라 새로운것들 투성이네요. 하지만 처음부터 잘하는 사람 없다는 말에 힘입어 열심히 공부해보도록 하겠습니다. 그럼 좋은 하루 보내세요~

 

 

출처

https://mangkyu.tistory.com/96

 

[Database] 인덱스(index)란?

1. 인덱스(Index)란? [ 인덱스(index)란? ] 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내

mangkyu.tistory.com

https://choicode.tistory.com/27

 

[DB] 데이터베이스(DB) 인덱스(Index) 란 무엇인가?

들어가면서.. DB를 사용하면서 데이터의 양(row)에 따라 실행 결과의 속도가 차이가 나는 것을 알고 있었다. 특히 데이터의 양이 증가할수록 실행 속도는 느려지고, JOIN이나 서브 쿼리 사용 시 곱

choicode.tistory.com