05/07 면접준비/정규화, 트랜잭션,인덱싱, 조인

전성수·2025년 5월 7일

정규화

  • 정규화는 데이터베이스 설계에서 데이터의 중복을 최소화하고, 데이터 무결성을 보장하기 위해 테이블을 분리하는 과정
  • 삽입, 갱신, 삭제 시 발생할 수 있는 이상 현상(Anomaly)을 방지하고, 데이터의 일관성과 효율성을 높일 수 있음
  • 지나친 정규화는 JOIN 연산이 많아져 성능 저하를 유발
    • 상황에 따라 반정규화도 고려

트랜잭션

트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위로, 여러 작업을 하나로 묶어 모두 성공하거나 모두 실패해야 합니다. 트랜잭션은 데이터의 신뢰성과 일관성을 보장하기 위해 ACID 원칙


인덱스

  • 인덱스(Index)는 데이터베이스에서 데이터를 빠르게 검색하기 위해 사용하는 자료구조
  • 특정 컬럼의 값을 기준으로 데이터의 위치를 빠르게 찾아줌
  • 인덱스를 사용하면 전체 테이블을 모두 탐색하지 않고도 원하는 데이터를 효율적으로 조회할 수 있어 검색 성능이 크게 향상
  • 인덱스를 생성하면 추가적인 저장 공간이 필요하고, 데이터의 삽입·수정·삭제 시 인덱스도 함께 관리해야 하므로 쓰기 작업의 성능이 저하
  • 일반적으로 조회가 빈번하고, 카디널리티(값의 다양성)가 높은 컬럼에 인덱스를 적용

조인

조인(Join)은 두 개 이상의 테이블을 연결하여 관련된 데이터를 하나의 결과로 조회하는 SQL 연산

  • 조인(Join)은 데이터베이스에서 여러 테이블의 데이터를 결합하는 강력한 기능이지만, 잘못 사용하거나 최적화가 안 된 경우에는 DB에 상당한 부담을 줌

    • 조인이 항상 느리거나 비효율적인 것은 아니며, 상황과 설계에 따라 다름
  • 조인이 부담이 되는 경우

    • 인덱스가 없을 때: 조인하는 컬럼(외래키 등)에 인덱스가 없으면, DB는 모든 행을 일일이 비교(풀 스캔)해야 하므로 매우 느려짐
    • 대용량 테이블 조인: 수백만~수천만 건의 대형 테이블끼리 조인하면, 연산량이 급격히 늘어남
    • 필터(WHERE) 없이 불필요한 데이터까지 조인: 필요한 데이터만 선별하지 않고 전체 데이터를 조인하면, 네트워크와 DB 모두에 부담이 커짐
    • 너무 많은 테이블 조인: 5개 이상 테이블을 한 번에 조인하면, 실행 계획이 복잡해지고 성능 저하가 발생할 수 있습니다.
  • 조인이 부담이 적은 경우

    • 조인 컬럼에 인덱스가 있을 때: 인덱스를 잘 사용하면 조인 성능이 크게 향상됩니다.
    • 필요한 데이터만 선택(SELECT 컬럼 지정, WHERE 조건 사용): 불필요한 데이터까지 가져오지 않으면 부담이 줄어듭니다.
    • 적절한 테이블 구조와 쿼리 최적화: 쿼리와 테이블 구조를 잘 설계하면, 현대의 DBMS는 조인을 매우 효율적으로 처리할 수 있습니다.

  1. DDL (Data Definition Language, 데이터 정의어)
    설명: 데이터베이스의 구조(테이블, 스키마 등)를 생성·변경·삭제하는 명령어입니다.

대표 명령어 및 예시:

CREATE : 테이블/데이터베이스 생성
CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(20));

ALTER : 테이블 구조 변경
ALTER TABLE user ADD email VARCHAR(50);

DROP : 테이블/데이터베이스 삭제
DROP TABLE user;

RENAME : 테이블 이름 변경
RENAME TABLE user TO member;

TRUNCATE : 테이블의 모든 데이터 삭제(구조는 남음)
TRUNCATE TABLE user;

  1. DML (Data Manipulation Language, 데이터 조작어)
    설명: 테이블에 저장된 실제 데이터를 조회·삽입·수정·삭제하는 명령어입니다.

대표 명령어 및 예시:

SELECT : 데이터 조회
SELECT * FROM user;

INSERT : 데이터 삽입
INSERT INTO user (id, name) VALUES (1, 'Alice');

UPDATE : 데이터 수정
UPDATE user SET name = 'Bob' WHERE id = 1;

DELETE : 데이터 삭제
DELETE FROM user WHERE id = 1;

  1. DCL (Data Control Language, 데이터 제어어)
    설명: 데이터베이스의 보안, 권한, 트랜잭션 제어 등을 담당하는 명령어입니다.

대표 명령어 및 예시:

GRANT : 권한 부여
GRANT SELECT ON user TO 'user1';

REVOKE : 권한 회수
REVOKE SELECT ON user FROM 'user1';

COMMIT : 트랜잭션 확정(변경 내용 저장)
COMMIT;

ROLLBACK : 트랜잭션 취소(변경 내용 되돌림)
ROLLBACK;

요약

DDL: 데이터 구조 정의/변경/삭제 (CREATE, ALTER, DROP, TRUNCATE, RENAME)

DML: 데이터 조회/삽입/수정/삭제 (SELECT, INSERT, UPDATE, DELETE)

DCL: 권한/보안/트랜잭션 제어 (GRANT, REVOKE, COMMIT, ROLLBACK)

이 세 가지는 SQL의 기본적인 분류이며, 데이터베이스를 다루는 데 필수적으로 알아야 하는 개념입니다.

profile
ㅡ/ㅡ

0개의 댓글