본문으로 바로가기

데이터베이스 인덱스(Index)

category MYSQL 2022. 6. 1. 19:36
반응형

1. 인덱스 (Index) ?

 - 인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 향상시켜주는 자료구조

 - 특정 필드에 인덱스를 설정하면 해당 필드의 데이터들을 정렬하여 

   별도의 메모리 공간에 데이터 물리적 주소와 함께 저장 

- 검색 할 때 조건으로 인덱스 필드로 사용할 경우 옵티마이저에서 판단하여 생성된 인덱스를 사용

  인덱스를 사용하게 되면 인덱스에 저장되어있는 물리적인 주소에서 데이터를 가져와 동작하며 덕분에

  검색속도를 항상 시켜줌

- 인덱스 생성 시 데이터를 오름차순으로 정렬하기 때문에 정렬된 주소체계라고 표현

 

2. 인덱스 장점

 - 테이블 내 데이터가 쌓이게 되면 테이블 레코드(ROW)는 순서없이 뒤죽박죽으로 저장이 되는데

   이렇게되면 특정 조건에 맞는 데이터를 찾을 때 레코드의 처음부터 끝까지 다 읽어 조건이 맞는지 비교

   위와같은 경우를 풀 스캔(FULL SCAN) 이라고 함

 - 인덱스를 사용할 경우에 인덱스 테이블 스캔(Index Table Scan) 을 하게 되는데

   인덱스 테이블 스캔을 할 경우 인덱스 테이블은 미리 정렬되어 저장이 되어있기 때문에 해당 조건에 맞는

   데이터를 빠르게 찾아낼 수 있음

 - ORDER BY에 의한 정렬 과정을 피할 수 있음 

   -> 사용 시 정렬과 동시에 1차적 으로 메모리에서 정렬이 이루어지기 때문

 - 인덱스는 이미 정렬되어 있어 데이터를 가져오기만 하면 됨

 - MIN MAX 레코드의 시작값과 끝값만 가져오기 때문에 굳이 풀 스캔을 할 필요가 없음

 

3. 인덱스 단점

 - 정렬된 상태를 계속 유지시켜줘야 하는 단점

 - 레코드 내 데이터가 바뀌는 값이라면 악영향을 미침

 - INSERT, UPDATE, DELETE 통해 데이터가 추가되거나 값이 바뀐다면 인덱스 테이블 내 

  값들을 다시 정렬해줘야 함 인덱스 테이블과 원본 테이블 두개 다 수정해줘야 함

- DML이 빈번한 테이블보다 검색위주로 테이블에 인덱스를 활용하는게 좋음

- 인덱스는 테이블의 전체 데이터 중 10 ~ 15 % 이하의 데이터를 처리하는데 효율적 그 이상은 사용하지 않는게 더 나음

- 적은 데이터를 가지고 있는 테이블에 굳이 인덱스를 사용할 필요 없음

- 인덱스 관리를 위해 데이터베이스 10% 저장공간이 별도로 필

- 인덱스 무분별하게 많을 경우 데이터베이스의 성능 부하를 초래하게 됨

 

 

 

 

4. 옵티마이저

 - 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심엔진

 - DBMS의 두뇌 

 

참고블로그 

https://choicode.tistory.com/27

 

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

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

choicode.tistory.com

 

반응형

'MYSQL' 카테고리의 다른 글

sql_mode=only_full_group_by 에러 해결방법  (0) 2023.04.26
[MySql] SHOW PROCESSLIST  (0) 2022.10.11
대표적인 SQL 종류  (0) 2022.07.14
트랜잭션 / 트랜잭션 격리수준  (0) 2022.06.03
Preparedstatement 사용이유  (0) 2022.05.17