본문 바로가기
독서/업무에 바로 쓰는 SQL 튜닝

물리 엔진과 오브젝트 용어

by yoon_seon 2024. 1. 30.

DB 엔진 용어

1. 스토리지 엔진

  • 역할 : 스토리지엔진(InnoDB, MyISAM, Memory 등)은 사용자가 요청한 SQL로 DB에 저장된 디스크나 메모리에 필요한 데이터를 가져온다.
  • 선택 기준 : 데이터를 저장하는 방식에 따라 각각의 스토리지 엔진을 선택해서 사용한다.
    • InnoDB : 데이터 일관성과 안정성이 중요한 OLTP(online transaction processing) 환경에서 사용. 일반적으로 온라인상의 트랜잭션 발생으로 데이터를 처리하는 OLTP 환경이 대다수이기 때문에 InnoDB를 자주 사용한다.
    • MyISAM : 대량의 쓰기 트랜잭션이 발생할 때 사용
    • Memory : 메모리 데이터를 로드해서 빠르게 데이터를 읽어야할 경우 사용

2. MySQL 엔진

  • 역할 : 사용자가 요청한 SQL에 대한 문법검사, 적절한 오브젝트 활용 검사를 하고 SQL을 최소 단위로 분리하여 원하는 데이터를 빠르게 찾는 경로를 모색 → 스토리지 엔진 엔진으로부터 받은 데이터에서 불필요한 데이터를 제거하거나 가공 및 연산한다.
  • 즉, SQL 문의 시작과 마무리 단계에서 MySQL 엔진이 관여하며, 스토리지 엔진으로 부터 필요한 데이터만을 가져오는 역할을 담당한다.


SQL 프로세스 용어

파서

  • 사용자가 요청한 SQL을 최소 단위로 분리하고 트리로 만든다. 트리를 만들면서 문법 검사를 수행한다.

전처리기

  • 파서에서 생성한 트리를 토대로 SQL문에 작성된 테이블, 열, 함수, 뷰와 같은 오브젝트가 실질적으로 존재하는지, 접근 권한은 부여되어 있는지 확인하는 역할을한다.

옵티마이저

  • 전달된 파서 트리를 기반으로 옵티마이저는 불필요한 조건 제거 및 연산 단순화를 수행하고, 효율적인 테이블 접근 순서, 인덱스 선택, 정렬 시 임시 테이블 사용 등 핵심적인 최적화 역할을 담당한다.
  • 실행 계획이 많을 때 옵티마이저는 모든 경우를 판단하지 않고, 비용을 빠르게 산정하여 최적의 실행 계획을 선택한다. → 선택된 계획이 항상 최상의 실행계획 이 아닐 수 있음.

엔진 실행기

  • 옵티마이저가 수립한 실행 계획을 기반으로 스토리지 엔진에서 데이터를 가져온 후, MySQL 엔진에서 데이터를 정렬, 조인하고 불필요한 데이터를 필터링하는 추가 작업을 수행한다.
  • 따라서 MySQL 엔진의 부하를 최소화하려면 스토리지 엔진에서 가져오는 데이터 양을 줄이는 것이 중요하다.

DB 오브젝트 용어

인덱스

  • 인덱스는 DB에서 키값으로 실제 데이터 위치를 식별하고 데이터 접근 속도를 높이고자 생성되는 키 기준으로 정렬된 오브젝트이다.
    • 기본키(PK)는 클러스형 인덱스로 작동한다.
  • 인덱스는 생성하려는 열의 속성에 따라 고유 인덱스와 비고유 인덱스로 구분할 수 있다.

고유 인덱스

  • 인덱스를 구성하는 열들의 데이터가 유일하다는 의미
  • 유니크키를 생성하면 자동으로 유니크 인덱스키를 생성한다.
  • 반대로 유니크 인덱스키를 생성하면 유니크키가 생성된다.
기본 키와 고유 인덱스의 차이점
기본 키와 고유 인덱스 모두 데이터의 유일성을 보장하고 효율적인 데이터 접근을 위한 인덱스 수단으로 사용된다. 하지만 기본 키에는 NULL을 삽입할 수 없고 고유 인덱스에는 NULL 삽입이 가능하다.


비 고유 인덱스

  • 비 고유 인덱스는 고유 인덱스에서 데이터의 유일한 속성만 제외한 키로 데이터가 신규로 입력되어 인덱스가 재정렬 되어도 인덱스 열의 중복 체크를 거치지 않고 단순한 정렬 작업을 수행한다.

  • 하나 이상의 테이블로부터 파생된 가상 테이블로, 저장 공간을 차지하지 않으며 쿼리의 결과를 나타낸다. 뷰는 데이터베이스 사용자에게 데이터의 일부 또는 필요한 부분만을 제공하고, 특정 조건에 따라 데이터를 가공하거나 조인할 수 있으며 데이터의 추상화를 제공하여 복잡한 쿼리를 간소화하고 보안성을 높이는 데 사용된다.
  • 뷰 테이블은 항상 원본 테이블을 바라보고 있기 때문에 원본 테이블의 데이터가 변경되면 뷰 테이블도 변경된 데이터를 출력한다.
뷰를 사용하는이유
일부 데이터에 대해서만 데이터를 공개하고, 노출에 민감한 데이터에 대해서는 제약을 설정할 수 있는 보안성 때문이다. 한편 여러 개의 테이블을 병합해서 활용할 때에는 성능을 고려한 최적화된 뷰를 생성함으로써 일관된 성능을 제공할 수 있다.

'독서 > 업무에 바로 쓰는 SQL 튜닝' 카테고리의 다른 글

개념적인 튜닝용어  (2) 2024.01.30
논리적인 SQL 개념 용어  (1) 2024.01.30

댓글