250412 TIL #631 SQL 튜닝 #2 물리엔진과 오브젝트 용어

김춘복·2025년 4월 12일
0

TIL : Today I Learned

목록 보기
635/636

Today I Learned

주말이라 주중에 바빠서 못했던 SQL 튜닝 공부 계속 ㄱㄱㄱ


물리엔진과 오브젝트 용어


출처 : @tastestar

스토리지 엔진

사용자가 요청한 SQL문을 기반으로 디스크나 메모리에 저장된 데이터를 검색해 DBMS엔진에 전달

  • SQL문을 토대로 디스크나 메모리에서 필요한 데이터를 가져오는 역할

  • MySQL은 플러그형 아키텍처라서 애플리케이션 코드의 변경없이 스토리지 엔진을 교체할 수 있다. 다라서 특정 애플리케이션 요구에 맞게 스토리지 엔진을 선택할 수 있다.

종류

  • InnoDB : 기본 스토리지 엔진. OTP(Online Transaction Processing) 환경에서 주로 사용되며 트랜잭션과 외래키를 지원. 충돌 복구 기능 제공
  • MYISAM : 트랜잭션을 지원하지 않고 테이블 수준의 잠금 처리를 하기 때문에 읽기 작업이 많은 환경에서 높은 성능을 발휘한다.
  • Memory : 메모리에 데이터를 로드해 빠른 읽기 작업에 적합

MySQL 엔진

DB의 논리적 처리를 담당해 DBMS의 두뇌 역할을 함

  • SQL 문을 사용자에게서 넘겨받은 뒤 SQL 문법 검사, 적절한 오브젝트 활용 검사, SQL문을 최소단위로 분리해 원하는 데이터를 빠르게 찾는 경로 모색을 한다.

  • 그리고 스토리지 엔진으로부터 받은 데이터 대상으로 불필요한 데이터를 제거하거나 가공 및 연산을 수행한다.

  • 시작과 마무리는 MySQL 엔진이, 중간 핵심 역할은 스토리지 엔진이 담당한다.

Parser

SQL 쿼리를 분석해 MySQL이 이해할 수 있는 최소 단위인 토큰으로 분리하고, 해당 구성요소를 트리로 만든다.

  • 트리를 만드는 과정에서 문법 오류를 체크한다.

PreProcessor

전처리기. 생성된 트리를 토대로 구조적 유효성을 검증한다.

  • SQL문에 작성된 테이블, 열, 함수, 뷰와 같은 오브젝트가 이미 실질적으로 생성되어있는지, 접근 권한이 올바르게 부여되어 있는지 등을 확인한다.

Optimizer

쿼리 실행 계획을 최적화하여 효율적인 데이터 검색 방법을 결정한다.

  • 전달된 파서 트리를 토대로 필요하지 않은 조건은 제거하고 연산과정을 단순화한다.
  • 정렬할 때 인덱스를 쓸지, 임시 테이블을 쓸지 같은 실행 계획을 작성해 전달한다.

Engine Excutor

수립된 실행 계획으로 스토리지 엔진을 호출해 필요한 데이터를 가져온다.

  • 이후 스토리지 엔진이 가져온 데이터 중 불필요한 데이터를 필터링한다.

DB 오브젝트 용어

Object

DB 내에서 데이터를 저장, 관리, 조작하기 위해 사용되는 논리적 저장 구조

  • 대표적인 DBMS에서 제공하는 오브젝트는 테이블, 뷰, 인덱스 등으로 구성된다.
  • 각 오브젝트는 특정한 목적과 기능을 가지며, 데이터의 효율적인 접근 및 관리를 지원한다.

주요 데이터베이스 오브젝트 종류

오브젝트설명
테이블(Table)데이터를 저장하는 가장 기본적인 객체. 행(Row)과 열(Column)로 구성
뷰(View)하나 이상의 테이블을 연결하여 마치 테이블처럼 사용할 수 있는 가상의 객체. 실제 데이터는 저장되지 않음
인덱스(Index)테이블의 검색 속도를 높이기 위한 객체. 특정 열에 대해 빠른 검색을 지원
시퀀스(Sequence)일련번호를 자동으로 생성해주는 객체. 주로 기본 키나 고유 식별자 생성에 사용
시노님(Synonym)다른 데이터베이스 객체에 대한 별칭을 부여하는 객체
함수(Function)특정 연산을 수행하고 값을 반환하는 객체
프로시저(Procedure)함수와 유사하지만 값을 반환하지 않고 복잡한 작업을 수행하는 객체
패키지(Package)관련 있는 함수와 프로시저를 하나로 묶어 관리하는 객체
  • 고유 인덱스(Unique Index)
    중복값을 허용하지 않는 인덱스로 데이터 무결성을 유지하고 각 행의 값이 고유하도록 보장한다.
    기본키와 유사하지만, 하나의 NULL이 허용되는 차이가 있다.(여러 NULL은 허용 X)

  • 비고유 인덱스
    중복값을 허용하는 인덱스. 대부분의 인덱스가 여기 속한다.


Primary Key (기본 키)

  • PK와 FK는 오브젝트로 간주되지는 않는다. 대신 테이블의 제약조건(Constraint)로 정의된다.
  • 테이블 내에서 각 레코드를 고유하게 식별하기 위해 사용되는 필드(or 필드 집합)
  • 테이블 생성 시 반드시 하나의 PK를 지정해야하고, 테이블 당 하나만 존재할 수 있다.
  • Clustered Index
    기본키의 구성 열 순서를 기준으로 물리적인 데이터가 쌓인다.
    MySQL과 MariaDB에서는 기본적으로 클러스터형 인덱스로 작동한다.

Foreign Key (외래 키)

  • 한 테이블의 필드가 다른 테이블의 PK를 참조하도록 설정된 제약조건
  • 외부의 테이블을 항상 참조하면서 외부 테이블 데이터가 변경되면 함께 영향을 받는 관계를 정의하는 키다.
  • 참조 무결성을 유지해 데이터 일관성을 보장한다.
  • 한 테이블에 여러 FK를 설정할 수 있고, PK와 다르게 NULL이나 중복도 허용될 수 있다.
profile
Full-Stack Dev / Data Engineer

0개의 댓글