8장 : 인덱스

문제

  1. 문제 1 (객관식) : 디스크

    • 🧞‍♀️ 다음중 SSD의 특징으로 옳지 않은 것을 고르시오

      1. 기계식 장치이다.

      2. 기존의 플래터를 제고하고 플래시 메모리를 장착하고 있다.

      3. 전원이 공급되지 않아도 데이터가 삭제되지 않는다.

  2. 문제 2 (주관식) : 랜덤 I/O, 순차 I/O

    • 🧞‍♂️ 쿼리 튜닝의 목적을 랜덤 I/O, 순차 I/O와 연관지어 서술하시요

  3. 문제 3 (주관식) : 인덱스

    • 🧞 인덱스를 사용 이유와 CRUD 각각 작업에서의 성능을 서술하시오.

  4. 문제 4 (주관식) : MySQL이 인덱스를 이용하는 방법

    • 🧞‍♀️ 인덱스 레인지 스캔이 이뤄지는 단계를 서술하시오.

  5. 문제 5 (객관식) : R-Tree 인덱스, 전문 검색 인덱스, 함수 기반 인덱스, 멀티 밸류 인덱스

    • 🧞‍♂️ 다음중 각각의 용어에 해당하는 설명을 올바르게 매칭하시오. (ex : a - A)

      a : R-Tree 인덱스
      b : 전문 검색 인덱스
      c : 함수 기반 인덱스 
      d : 멀티 밸류 인덱스 

      A : 문서 전체에 대한 분석과 검색을 위한 이러한 인덱싱 알고리즘

      B : 하나의 데이터 레코드가 여러 개의 키 값을 가질 수 있는 형태의 인덱스

      C : 2차원의 데이터를 인덱싱하고 검색하는 목적의 인덱스

      D : 일반적인 칼럼의 값 일부 혹은 전체에 대해서만 인덱스를 생성하거나, 칼럼의 값을 변형해서 인덱스를 만들 때 사용하는 인덱스

  6. 문제 6 : 클러스터링 인덱스

    • 🧞 클러스터링 인덱스의 장단점을 서술하시오

정답

  • Q1

    a → HDD 특징이다. SDD는 전자식(Solid State Drive) 저장 매체이다.

  • Q2

    • 일반적으로 쿼리를 튜닝하는 것은 랜덤 I/O 자체를 줄여주는 것이 목적이라고 할 수 있다. 여기서 랜덤 I/O를 줄인다는 것은 쿼리를 처리하는데 꼭 필요한 데이터만 읽도록 쿼리를 개선하는 것을 의미한다.

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

  • Q3

    • 인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 의미하며, 데이터의 읽기 속도를 높이는 기능이다.

    • CUD : 처리 속도가 느려

    • READ : 처리 속도 높음

  • Q4

    1. 인덱스에서 조건을 만족하는 값이 저장된 위치를 찾는다. 이 과정을 인덱스 탐색(index seek)이라고 한다.

    2. 1번에서 탐색된 위치부터 필요한 만큼 인덱스를 차례대로 쭉 읽는다. 이 과정을 인덱스 스캔(index scan)이라고 한다. (1번과 2번 합쳐서 인덱스 스캔으로 통칭하기도 한다. )

    3. 2번에서 읽어 들인 인덱스 키와 레코드 주소를 이용해 레코드가 저장된 페이지를 가져오고, 최종 레코드를 읽어 온다.

      • 쿼리가 필요로 하는 데이터에 따라 3번 과정을 필요하지 않을 수도 있는데, 이를 커버링 인덱스라고 한다. 커버링 인덱스로 처리되는 쿼리는 디스크의 레코드를 읽지 않아도 되기 때문에 랜덤 읽기가 상당히 줄어들고 성능은 그만큼 빨라진다. MySQL 서버에서는 1번과 2번 단게의 작업이 얼마나 수행됐는지를 확인할 수 있게 다음과 같은 상태 값을 제공한다.

  • Q5

    • a - C

    • b - A

    • c - D

    • d - B

  • Q6

    • 장점

      • 프라이머리 키로 검색할 때 처리 성능이 매우 빠름

      • 테이블의 모든 세컨더리 인덱스가 프라이머리 키를 가지고 있기 때무에 인덱스만으로 처리될 수 있는 경우가 많음

    • 단점

      • 테이블의 모든 세컨더리 인덱스가 클러스터링 키를 갖기 때문네 클러스터링 키 값의 크기가 클 경우 전체적으로 인덱스의 크기가 커짐

      • 세컨더리 인덱스를 통해 검색할 때 프라이머리 키로 다시 한 번 검색해야 하므로 처리 성능이 느림

      • INSERT 할 때 프라이머리 키에 의해 레코드의 저장 위치가 결정되기 때문에 성능이 느림

      • 프라이머리 키를 변경할 때 레코드를 DELETE하고 INSERT하는 작업이 필요하기 떄문에 처리 성능이 느림

Last updated