1. DB 엔진 용어
1-1. SQL문 실행 과정
- 파서(parser) 역할
- MySQL 엔진에서 문법 에러 검사
- DB에 존재하는 테이블에 대해 SQL문을 작성했는지 검사
- 옵티마이저(optimizer) 역할
- 사용자가 요청한 데이터를 빠르고 효율적으로 찾아가는 계획 수립
- 데이터를 찾아서 MySQL 엔진으로 전달
- MySQL 엔진은 전달 받은 데이터를 필터링, 필요한 연산을 수행하고 사용자에게 최종 결과 전달
1-2. 스토리지 엔진
사용자가 요청한 SQL문을 토대로 DB의 데이터를 가져와 MySQL 엔진으로 전달
사용할 스토리지 엔진 선택 문제
- 스토리지 엔진이 데이터를 저장하는 방식에 따라 스토리지 엔진 선택
- InnoDB 엔진 : 온라인상 트랜잭션의 발생으로 데이터를 처리하는 환경(OLTP; online transaction processing)
- MyISAM 엔진 : 대량의 쓰기 트랜잭션 발생 시
- Memory 엔진 : 메모리 데이터를 로드하여 빠르게 읽어야 할 때
- 외부 스토리지 엔진 설치 파일을 가져와 활성화하여 사용 가능
✅ 일반적으로 OLTP 환경이 많기에 InnoDB 엔진을 사용한다.
1-3. MySQL 엔진
<SQL문 시작 단계에서의 역할>
- SQL문 문법 검사
- SQL문이 적절한 오브젝트를 사용했는지 검사
- SQL문을 최소 단위로 분리
➡️ 원하는 데이터를 빠르게 찾는 경로를 모색
<SQL문 마무리 단계에서의 역할>
➡️ 스토리지 엔진으로부터 전달받은 데이터를 가공, 연산
2. SQL 프로세스 용어

1) 사용자의 SQL문 실행
2) 파서 (parsor)
- MySQL이 이해할 수 있는 최소 단위로 구성요소 분리
- 구성요소를 트리로 생성
- 트리를 생성하는 과정에서 문법 오류 검토
- 트리의 최소 단위 : >, <, = 등의 기호, SQL 키워드
- 트리에 허용되지 않는 문법 포함 시 에러 발생 & 실행 종료
3) 전처리기 (preprocessor)
- 생성된 트리 결과를 토대로, SQL문의 "유효성" 검토 ➡️ 유효성 불만족 시 에러 발생
- 이미 생성된 테이블, 뷰 등으로 구성되지 않았는지
- 존재하지 않는 열을 포함하지 않았는지
- 조회 권한이 없는 테이블을 조회하는지 등
4) 옵티마이저 (optimizer)
- 효율적인 데이터 검색 실행 계획 수립
- 어떤 순서로 텡블에 접근할지
- 인덱스를 사용할 것인지
- 정렬 시 인덱스, 임시 테이블 중 어떤 것을 사용할 것인지 등
5) 엔진 실행기 (engine executor)
- 수립된 실행 계획으로 스토리지 엔진 호출하여 데이터 가져오기
- 불필요한 데이터 필터링하여 사용자에게 전달
3. DB 오브젝트 용어
3-1. 테이블
데이터를 저장하는 오브젝트
행과 열의 정보를 담는다.
3-2. 행, 로우 (row)
하나의 객체에 대한 데이터 항목의 집합
3-3. 열, 컬럼 (column)
데이터 유형
3-4. 기본 키 (pk; primary key)
- 특정 행을 대표하는 열
ex) 주민등록번호
- 2개 이상으로 구성할 수 있다.
- 인덱스 역할을 수행할 수 있다. MySQL에서 비슷한 기본 키 값들이 근거리에 적재되므로 "클러스터형 인덱스"로 작동 가능 ➡️ 테이블 스캔 속도 향상
- Null 입력 불가능
CREATE TABLE 전공 (
전공코드 CHAR(2) NOT NULL,
전공명 VARCHAR(10) NOT NULL,
PRIMARY KEY (전공코드)
);
3-5. 외래 키 (fk; foreign key)
외부 테이블을 참조하는 키
CREATE TABLE 학생 (
학번 INT(10) NOT NULL,
이름 VARCHAR(10) NOT NULL,
생년월일 CHAR(8),
연락처 VARCHAR(15),
전공코드 CHAR(2),
PRIMARY KEY (학번),
CONSTRAINT 학생_FK1 FOREIGN KEY (전공코드) REFERENCES 전공(전공코드)
);
3-6. 인덱스 (index)
- 데이터에 대한 위치 정보
- Null 입력 가능
- 인덱스 종류
3-7. 뷰 (view)
- 가상 테이블, 보안성 측면에서 사용한다.
- 학생 테이블 ↔️ 학생 뷰 : 사이의 변경은 서로 즉시 반영된다.
CREATE VIEW 학생_뷰 AS
SELECT 학번, 이름
FROM 학생 ;
📌 Source
- 양바른, 「업무에 바로 쓰는 SQL 튜닝」, 한빛미디어, 2021
💡 질문과 피드백은 댓글에 남겨주시기 바랍니다.
❤️ 도움이 되셨다면 공감 부탁드립니다.