자주

Hi·2026년 7월 24일

부분범위 처리, 소트 생략 파트 공부하자

  • 파티션 부분
  • 병렬처리
  • 데이터베이스 아키텍처 (redo, undo 등)

문제풀 때 생각할 것들!

  • 집합적 사고!
  • 불필요한 조인 제거!
  • 조인 순서 변경! (큰 테이블 먼저 조인하지 말고 필터된 애들 작은 테이블 고려!)
  • 함수적 종속관계!

Index Skip Scan이 작동하기 위한 조건

  • 최선두 컬럼에 대한 조건절이 누락된 경우
  • Distinct Value가 적은 두 개의 선두컬럼이 모두 누락된 경우
  • 최선두 컬럼은 입력하고 중간 컬럼에 대한 조건절이 누락된 경우
  • 선두 컬럼이 범위검색 조건인 경우

IN 조건은 '=' 인가?

IN은 IN-List Iterator 방식으로 풀려야 '=' 조건

인덱스를 사용(Range Scan) 할 수 있으려면

  • 인덱스 선두 컬럼이 조건절에!
  • 인덱스 선두 컬럼에 대한 가공, 중간값 검색, 부정형 비교 등 X

주요 I/O 발생 지점이 테이블 액세스 단계이면

  • 인덱스 컬럼 추가
  • Batch I/O 활용: batch_table_access_by_rowid 힌트 활용
  • 클러스터링 팩터 개선: 배치 프로그램 정렬 insert, cluster_by_rowid 힌트 활용
  • 클러스터링 전략: IOT, Cluster
  • Full Scan: 파티션, 병렬 처리 활용

주요 I/O 발생 지점이 인덱스 스캔 단계이면

  • 인덱스 컬럼 순서 조정
  • Skip Scan 활용
  • 선분조건을 IN-List로 변환
  • 선분조건을 IN 서브쿼리 또는 조인으로 변환
  • 인덱스 컬럼 가공, 중간값 검색, 부정형 비교, OR조건/IN-List, 옵션조건에 대한 컴토 및 튜닝

소트 머지 조인의 특징

  • 실시간 인덱스 생성
    - 양쪽 집합을 정렬한 다음에는 NL 조인과 같은 오퍼레이션
  • 인덱스 유무에 영향을 받지 않음
  • 양쪽 집합을 개별적으로 읽고 나서 조인
  • 스캔 위주의 액세스 방식
    - 양쪽 소스 집합에서 정렬 대상 레코드를 찾는 작업은 인덱스를 이용해 Random 액세스 방식으로 처리될 수 있음

First 테이블에 인덱스가 있으면 소트 생략 가능

해시 조인 사용기준

  • 해시 조인 성능을 좌우하는 두 가지 키 포인트
    - 한 쪽 테이블이 Hash Area에 담길 정도로 충분히 작아야
    • Build Input 해시 키 컬럼에 중복 값이 거의 없어야

해시 조인은 아래와 같은 상황에서 사용!

  1. 수행빈도가 낮고
  2. 쿼리 수행 시간이 오래 걸리는
  3. 대용량 테이블을 조인할 때 (배치, DW, OLAP 성 쿼리)

조인 메소드 비교

  • NL 조인에서 Join 과정은 신경써야할 Cost
  • 소트 머지, 해시 조인의 PGA 내 조인은 무시할 만한 Cost

서브쿼리와 조인

서브쿼리를 그대로 둔 상태로 최적화하려면
-> 필터(Filter) 오퍼레이션: NL 조인 방식 + 조인 순서 고정
FILTER = NL 조인

Join Predicate Pushdown

  • 메인 쿼리를 수행하면서 조인 조건절 값을 건건이 뷰 안으로 Pushing

/+ no_merge push_pred */

서브쿼리 Pushing

  • Unnesting 되지 않은 서브쿼리는 항상 필터 방식! (메인 쿼리 기준 건건이 필터 (NL 방식)
    - 서브쿼리 필터링을 먼저 처리해서 다음 단계로 넘어가는 로우 수를 클게 줄이면 성능 상 유리
    - /+ NO_UNNEST PUSH_SUBQ */

조건절 이행

테이블간 조인 릴레이션을 기반으로, 한 테이블에 사용된 필터 조건을 반대편 테이블에 대한 필터 조건으로도 사용하는 경우

개념

NDV = 컬럼 값 종류 개수 (Number of Distinct Values)

선택도 = 1/NDV

카디널리티 = 총 로우수 X 선택도 = 총 로우수 / NDV

"선택도가 낮다" = "카디널리티가 낮다" = "변별력이 좋다"

SQLD 파트

트랜잭션 ACID

  • 원자성: 트랜잭션의 작업은 모두 수행되거나 모두 수행되지 않아야 함
  • 일관성: 트랜잭션이 완료되면 데이터 무결성이 일관되게 보장되어야 함
  • 고립성: 트랜잭션이 다른 트랜잭션으로부터 고립된 상태로 수행되어야 함
  • 지속성: 트랜잭션이 완료되면 장애가 발생하더라도 변경 내용이 지속되어야 함

PK 제약 조건 VS UNIQUE 제약 조건

PK 제약 조건은 NULL을 허용하지 않고, UNIQUE 제약 조건은 NULL을 허용한다.
(단, DBMS마다 다름)

CHAR 타입 vs VARCHAR2 타입

CHAR 타입은 값의 크기가 데이터 타입의 크기보다 작으면 뒤쪽에 공백을 채워서 값을 저장하는 반면, VARCHAR2 타입은 입력한 값을 그대로 저장한다.

대기 이벤트

db file sequential read: 한 번에 한 블록씩 디스크에서 읽을 때 기다리는 대기 이벤트 (주로 인덱스를 통한 테이블 액세스)

db file scattered read: 여러 블록씩 (주로 테이블 풀스캔)

0개의 댓글