컴퓨터 과학/[Study] Real MySQL 8.0

Chapter 08.01 디스크 읽기 방식 ~ 08.02 인덱스란?

계란💕 2022. 12. 11. 21:45

8.1 디스크 읽기 방식

  • 컴퓨터의 CPU나 메모리처럼 전기적 특성을 띤 장치의 성능을 빠른속도로 발전했으나 디스크같은 기계식 장치의 성능은 제한적으로 발전했다. 
  • 최근에는 하드디스크보다 SSD드라이브를 많이 사용하지만 여전히 데이터 저장 매체는 컴퓨터에서 가장 느린 부분이다.

 

 

8.1.1 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD)

  • 컴퓨터에서 CPU나 메모리같은 주요 장치는 대부분 전자식 장치지만 하드 디스크 드라이브는 기계식 장치이다. 
  • 그래서 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다.
  • 이런 HDD를 대체하기 위해 SSD가 많이 출시되고 있다.
    • SSD는 기존 하드 디스크의 데이터 저장용 플래터(원판)을 제거하고 그 대신 플래시 메모리를 장착하고 있다. 
    • HDD처럼 원판을 회전시킬 필요가 없기 때문에  데이터를 빨리 읽고 쓸 수 있다. 
    • 컴퓨터의 메모리(D-RAM)보다는 느리지만 HDD보다 훨씬 빠르다.

 

 

 

8.1.2 랜덤 I/O와 순차 I/O

  • 랜덤 I/O: 하드 디스크 드라이브의 플래터(원판)을 돌려서 읽어야할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 다음 데이터를 읽는것을 의미하는데 순차 I/O 또한 이 작업 과정이 같다.

 

 

8.2 인덱스(Index)란?

  • DBMS는 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과를 가져오려면 시간이 오래 걸린다. 
  • 따라서, 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍(key-value pair)으로 삼아 인덱스를 만든다.
  • DBMS의 인덱스 칼럼의 값을 주어진 순서로 정렬해서 보관한다.
  • DBMS의 인덱스는 데이터의 저장(INSERT, UPDATE, DELETE) 성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능이다. 
  • 인덱스는 데이터를 관리하는 방식(알고리즘)과 중복 값의 허용 여부 등에 따라 여러 가지로 나눌 수 있다. 
  • 이 교재에서는 Key = index 같은 의미로 사용

 

 

인덱스를 역할별 구분

  • 인덱스를 역할별로 구분하면 프라이머리 키(Primary Key)와 보조 키(세컨더리 인덱스, Secondary Key) 구분 가능하다.
  • 프라이머리 키(Primary Key): 레코드를 대표하는 칼럼의 값으로 만들어진 인덱스를 의미한다. 식별자라고도 부른다. NULL, 중복 불가
  • 세컨더리 인덱스(Secondary Key): 프라이머리 키를 제외한 나머지 모든 인덱스는 세컨더리 인덱스(Secondary Index)로 분류. 유니크 인덱스는 프라이머리 키와 성격이 비슷하고 프라이머리 키를 대체해서 사용 가능해서 대체 키(보조 키)라고도 한다 

 

 

인덱스를 데이터 저장 방식 (알고리즘)별로 구분

  • B-Tree 인덱스와 Hash 인덱스로 구분한다. 
    • B-Tree 인덱스(Balanced index): 균형잡힌 트리
    • Hash 인덱스 
  • 최근에는 Fractal-Tree인덱스나 로그 기반의 Merge-Tree 인덱스와 같은 알고리즘을 사용하는 DBMS도 개발중이다.
  • B-Tree 인덱스 알고리즘: 가장 일반적으로 사용되는 인덱스 알고리즘이다. 칼럼의 값을 변형하지 않고 원래의 값을 이용해서 인덱싱하는 알고리즘이다.
  • Hash 인덱스 알고리즘은 칼럼의 값으로 해시값을 계산해서 인덱싱하는 알고리즘으로 매우 빠른 검색을 지원한다. 하지만, 값을 변형해서 인덱싱하므로 전방(Prefix) 일치와 같이 값의 일부만 검색하거나 범위를 검색할 때는 해시 인덱스를 사용할 수 없음. 메모리 기반의 데이터베이스에서 많이 사용된다.

 

 

데이터의 중복 허용 여부로 구분

  • 유니크 인덱스(Unique Index): 같은 값이 1개만 존재한다. 
  • 유니크하지 않은 인덱스(Non-Unique): 같은 값이 여러 개 존재할 수 있다.
  • 인덱스의 유니크한지 아니지의 여부는 옵티마이저에게 중요한 문제이다.
    • 동등 조건(Equal, =)로 검색하는 건 1개의 결과만 찾으면 더 이상 찾지 않아도 된다고 옵티마이저에게 알려주는 효과를 낸다.

 

 

 

출처 - 「Real MySQL 8.0 - 백은빈, 이성욱」 위키북스