[Database] SQL이란, 그리고 SQL문이 실행되는 과정과 원리
본문 바로가기

ComputerScience/Database

[Database] SQL이란, 그리고 SQL문이 실행되는 과정과 원리

SQL

SQL(Structured Query Language)은 데이터베이스에서 데이터를 생성, 검색, 업데이트, 삭제하기 위한 표준 프로그래밍 언어입니다. SQL은 관계형 데이터베이스 관리 시스템(RDBMS)에 주로 사용되며, 1986년에 표준화되었습니다.

 

SQL의 주요 특징은 다음과 같습니다.

 

  1. DDL(Data Definition Language): 데이터베이스 구조를 정의하고 수정하기 위한 명령어를 포함합니다. CREATE, ALTER, DROP 등의 명령어가 여기에 속합니다.
  2. DQL(Data Query Language): 데이터베이스에서 특정 데이터를 조회하기 위한 명령어를 포함합니다. 가장 일반적인 예는 SELECT 문입니다.
  3. DML(Data Manipulation Language): 데이터베이스 내의 데이터를 추가, 수정, 삭제하기 위한 명령어를 포함합니다. INSERT, UPDATE, DELETE가 이에 해당합니다.
  4. DCL(Data Control Language): 데이터베이스의 접근 제어와 보안을 담당하는 명령어를 포함합니다. GRANT와 REVOKE가 이에 해당합니다.
  5. TCL(Transaction Control Language): 데이터베이스 내의 트랜잭션을 관리하는 명령어를 포함합니다. COMMIT, ROLLBACK 등이 여기에 속합니다.

아래는 SQL을 구성하는 특징들 입니다.

이미지 출처: https://github.com/ByteByteGoHq/system-design-101/raw/main/images/how-to-learn-sql.jpg

SQL문이 실행되는 순서

 

  1. FROM:
    쿼리는 FROM 절에서 사용될 테이블을 식별하는 것으로 시작합니다. 여기서는 t1과 t2 테이블을 지정했습니다. 이 단계에서 사용될 데이터셋이 설정됩니다.
  2. JOIN:
    SQL 엔진이 JOIN 절에 명시된 테이블을 결합합니다. 여기서는 t2가 t1에 조인됩니다.
  3. ON:
    ON 절은 조인된 테이블의 행을 매칭하는 조건을 지정합니다. 예를 들어 t1.column_a = t2.column_a 조건을 통해 행이 필터링됩니다.
  4. WHERE:
    WHERE 절에서 특정 조건(constraint_expression)을 만족하는 행만 필터링합니다. 이 조건을 만족하는 행만 다음 단계로 넘어갑니다.
  5. GROUP BY:
    GROUP BY 절은 특정 열을 기준으로 필터링된 행을 그룹화합니다. 집계 계산이 필요한 경우 이 단계에서 그룹화가 이루어집니다.
  6. HAVING:
    HAVING 절은 집계된 데이터 중 특정 조건을 만족하는 그룹만 필터링합니다. 조건을 만족하는 그룹만 결과에 포함됩니다.
  7. SELECT:
    SELECT 절은 최종 출력에 포함될 열을 지정합니다. 여기서는 column_a와 column_b가 선택되었습니다.
  8. ORDER BY:
    ORDER BY 절은 최종 결과 세트를 특정 열을 기준으로 오름차순(ASC) 또는 내림차순(DESC)으로 정렬합니다.
  9. LIMIT:
    마지막으로 LIMIT 절은 반환할 행의 개수를 제한합니다.

SQL의 실행은 매우 복잡하며, 다음과 같은 여러 고려 사항을 포함합니다

 

  1. 인덱스와 캐시의 사용
  2. 테이블 조인의 순서
  3. 동시성 제어
  4. 트랜잭션 관리 이러한 모든 단계와 고려 사항은 데이터베이스 시스템이 효율적으로 작동하도록 하는 데 중요합니다.

SQL이 실행되는 원리

Step 1

SQL 문장이 전송 계층 프로토콜(예: TCP)을 통해 데이터베이스로 전송됩니다.

Step 2

SQL 문장이 명령 Parser로 전송되어, 구문 및 의미 분석을 거친 후 쿼리 트리가 생성됩니다.

Step 3

쿼리 트리가 Optimizer로 전송됩니다. Optimizer는 실행 계획을 생성합니다.

Step 4

실행 계획이 executer로 전송됩니다. executer는 실행에서 데이터를 검색합니다.

Step 5

Access methods는 실행에 필요한 데이터 추출 로직을 제공하며, 스토리지 엔진에서 데이터를 검색합니다.

Step 6

Access methods는 SQL 문장이 읽기 전용인지를 결정합니다. 만약 쿼리가 읽기 전용(SELECT 문장)이라면, 버퍼 관리자로 전송되어 추가 처리가 이루어집니다. 버퍼 관리자는 캐시나 데이터 파일에서 데이터를 찾습니다.

Step 7

만약 문장이 UPDATE 또는 INSERT라면, 추가 처리를 위해 transaction 관리자로 전송됩니다.

Step 8

트랜잭션 동안, 데이터는 Lock 모드에 있습니다. 이것은 Lock 관리자에 의해 보장됩니다. 또한 트랜잭션의 ACID 속성을 보장합니다.

참고 자료

https://github.com/ByteByteGoHq/system-design-101?tab=readme-ov-file#sql-language

 

GitHub - ByteByteGoHq/system-design-101: Explain complex systems using visuals and simple terms. Help you prepare for system des

Explain complex systems using visuals and simple terms. Help you prepare for system design interviews. - GitHub - ByteByteGoHq/system-design-101: Explain complex systems using visuals and simple te...

github.com