인덱스

theonde·2022년 9월 14일

디스크 읽기 방식

  • 데이터 저장 매체(디스크)는 컴퓨터에서 가장 느린 부분이다.

  • 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건일때가 상당히 많다.

HDD, SSD

  • 하드 디스크는 기계식 장치다. 그래서 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다.

  • 전자식 저장 매체인 SSD가 나왔다.

  • SSD는 플래시 메모리를 장착하고 있다. 디스크 원판을 기계적으로 회전시킬 필요가 없으므로 아주 빨리 데이터를 읽고 쓸 수 있다.

  • 비휘발성이다.

랜덤I/O 순차I/O

  • 랜덤I/O는 하드 디스크 드라이브의 원판을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는 것을 의미한다. 순차 I/O도 이 방식은 똑같다.

  • 순차 I/O가 랜덤 I/O보다 약 3배정도 빠르다.

  • 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한번에 기록하느냐에 따라 결정된다.

  • 인덱스 레인지 스캔은 데이터를 읽기 위해 랜덤I/O를 사용하며 풀 테이블 스캔은 순차I/O를 사용한다. 그래서 큰 테이블의 레코드 대부분을 읽는 작업에서는 인덱스를 사용하지 않고 풀 테이블 스캔을 사용하도록 유도할 때도 있다.

인덱스

  • DB 테이블의 모든 데이터를 검색해서 원하는 결과를 가져오려면 시간이 오래 걸린다.

  • 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 삼아 인덱스로 만들어 둔다.

  • 인덱스는 칼럼의 값을 주어진 순서로 미리 정렬해서 보관한다.

  • 인덱스는 저장될 때마다 항상 값을 정렬해야 하므로 저장하는 과정이 복잡하고 느리다.

  • 이미 정렬돼 있어 아주 빨리 원하는 값을 찾아올 수 있다.

  • insert, update, delete는 느리지만 select는 매우 빠르게 처리할 수 있다.

  • 인덱스는 저장 속도를 희생하고 데이터 읽기 속도를 높이는 기능이다.

  • 저장 속도를 어디까지 희생할 수 있는지, 읽기 속도를 얼마나 더 빠르게 만들어야 하는지에 따라 결정해야 한다.

  • where 조건절에 사용되는 컬럼이라고 전부 인덱스로 생성하면 저장 성능이 떨어지기 때문에 주의해야 한다.

  • 프라이머리 키와 보조키(세컨더리 인덱스)로 구분할 수 있다.

  • 세컨더리 인덱스는 프라이머리 키 외의 인덱스다.

profile
개발자ㅋ.ㅋ

0개의 댓글