기본 콘텐츠로 건너뛰기

SQLP GUIDE


데이터 모델링의 이해

데이터 모델링의 이해

1. 데이터 모델링의 이해

  1. 모델링의 이해
    • 모델링의 정의
    • 모델링의 특징
    • 모델링의 세 가지 관점
  2. 데이터 모델의 기본 개념의 이해
    • 모델링의 정의
    • 데이터 모델이 제공하는 기능
  3. 데이터 모델링의 중요성 및 유의점
    • 파급효과(Leverage)
    • 복잡한 정보 요구사항의 간결한 표현(Conciseness)
    • 데이터 품질(Data Quality)
  4. 데이터 모델링의 3단계 진행
    • 개념적 데이터 모델링(Conceptual Data Modeling)
    • 논리적 데이터 모델링(Logical Data Modeling)
    • 물리적 데이터 모델링(Physical Data Modeling)
  5. 프로젝트 생명주기(Life Cycle)에서 데이터 모델링
  6. 데이터 모델링에서 데이터독립성의 이해
    • 데이터독립성의 필요성
    • 데이터베이스 3단계 구조
    • 데이터독립성 요소
    • 두 영역의 데이터독립성
    • 사상(Mapping)
  7. 데이터 모델링의 중요한 세 가지 개념
    • 데이터 모델링의 세 가지 요소
    • 단수와 집합(복수)의 명명
  8. 데이터 모델링의 이해관계자
    • 이해관계자의 데이터 모델링 중요성 인식
    • 데이터 모델링의 이해관계자
  9. 데이터 모델의 표기법인 ERD의 이해
    • 데이터 모델 표기법
    • ERD(Entity Relationship Diagram) 표기법을 이용하여 모델링하는 방법
  10. 좋은 데이터 모델의 요소
    • 완전성(Completeness)
    • 중복배제(Non-Redundancy)
    • 업무규칙(Business Rules)
    • 데이터 재사용(Data Reusability)
    • 의사소통(Communication)
    • 통합성(Integration)

2. 엔터티

  1. 엔터티의 개념
  2. 엔터티와 인스턴스에 대한 내용과 표기법
  3. 엔터티의 특징
    • 업무에서 필요로 하는 정보
    • 식별이 가능해야 함
    • 인스턴스의 집합
    • 업무프로세스에 의해 이용
    • 속성을 포함
    • 관계의 존재
  4. 엔터티의 분류
    • 유무(有無)형에 따른 분류
    • 발생시점(發生時點)에 따른 분류
    • 엔터티 분류 방법의 예
  5. 엔터티의 명명

3. 속성(Attribute)

  1. 속성 (Attribute)의 개념
  2. 엔터티, 인스턴스와 속성, 속성값에 대한 내용과 표기법
    • 엔터티, 인스턴스, 속성, 속성값의 관계
    • 속성의 표기법
  3. 속성의 특징
  4. 속성의 분류
    • 속성의 특성에 따른 분류
    • 엔터티 구성방식에 따른 분류
  5. 도메인(Domain)
  6. 속성의 명명(Naming)

4. 관계(Relationship)

  1. 관계의 개념
    • 관계의 정의
    • 관계의 패어링
  2. 관계의 분류
  3. 관계의 표기법
    • 관계명(Membership)
    • 관계차수(Degree/Cardinality)
    • 관계선택사양(Optionality
  4. 관계의 정의 및 읽는 방법
    • 관계 체크사항
    • 관계 읽기

5. 식별자(Identifiers)

  1. 식별자(Identifiers) 개념
  2. 식별자의 특징
  3. 식별자 분류 및 표기법
    • 식별자 분류
    • 식별자 표기법
  4. 주식별자 도출기준
    • 해당 업무에서 자주 이용되는 속성을 주식별자로 지정하도록 함
    • 명칭, 내역 등과 같이 이름으로 기술되는 것은 피함
    • 속성의 수가 많아지지 않도록 함
  5. 식별자관계와 비식별자관계에 따른 식별자
    • 식별자관계와 비식별자 관계의 결정
    • 식별자관계
    • 비식별자관계(Non-Identifying Relationship)
    • 식별자 관계로만 설정할 경우의 문제점
    • 비식별자 관계로만 설정할 경우의 문제점
    • 식별자관계와 비식별자관계 모델링

데이터 모델과 성능

1. 성능 데이터 모델링의 개요

  1. 성능 데이터 모델링의 정의
  2. 성능 데이터 모델링 수행시점
  3. 성능 데이터 모델링 고려사항

2. 정규화와 성능

  1. 정규화를 통한 성능 향상 전략
  2. 반정규화된 테이블의 성능저하 사례1
  3. 반정규화된 테이블의 성능저하 사례2
  4. 반정규화된 테이블의 성능저하 사례3
  5. 반정규화된 테이블의 성능저하 사례4
  6. 함수적 종속성(Functional Dependency)에 근거한 정규화 수행 필요

3. 반정규화와 성능

  1. 반정규화를 통한 성능향상 전략
    • 반정규화의 정의
    • 반정규화의 적용방법
  2. 반정규화의 기법
    • 테이블 반정규화
    • 칼럼 반정규화
    • 관계 반정규화
  3. 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우
  4. 정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우

4. 대량 데이터에 따른 성능

  1. 대량 데이터발생에 따른 테이블 분할 개요
  2. 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
  3. 대량 데이터 저장 및 처리로 인해 성능
    • RANGE PARTITION 적용
    • LIST PARTITION 적용
    • HASH PARTITION 적용
  4. 테이블에 대한 수평분할/수직분할의 절차

5. 데이터베이스 구조와 성능

  1. 슈퍼타입/서브타입 모델의 성능고려 방법
    • 슈퍼/서브타입 데이터 모델의 개요
    • 슈퍼/서브타입 데이터 모델의 변환
    • 슈퍼/서브 타입 데이터 모델의 변환기술
    • 슈퍼/서브타입 데이터 모델의 변환타입 비교
  2. 인덱스 특성을 고려한 PK/FK 데이터베이스 성능향상
    • PK/FK 칼럼 순서와 성능개요
    • PK칼럼의 순서를 조정하지 않으면 성능이 저하 이유
    • PK순서를 잘못 지정하여 성능이 저하된 경우 - 간단한 오류
    • PK순서를 잘못 지정하여 성능이 저하된 경우 - 복잡한 오류
  3. 물리적인 테이블에 FK제약이 걸려있지 않을 경우 인덱스 미생성으로 성능저하

6. 분산 데이터베이스와 성능

  1. 분산 데이터베이스의 개요
  2. 분산 데이터베이스의 투명성(Transparency)
  3. 분산 데이터베이스의 적용 방법 및 장단점
    • 분산 데이터베이스 적용방법
    • 분산 데이터베이스 장단점
  4. 분산 데이터베이스의 활용 방향성
  5. 데이터베이스 분산구성의 가치
  6. 분산 데이터베이스의 적용 기법
    • 테이블 위치 분산
    • 테이블 분할(Fragmentation) 분산
    • 테이블 복제(Replication) 분산
    • 테이블 요약(Summarization) 분산
  7. 분산 데이터베이스를 적용하여 성능이 향상된 사례

SQL 기본 및 활용

SQL 기본

1. 관계형 데이터베이스 개요

  1. 데이터베이스
  2. SQL(Structured Query Language)
  3. TABLE
  4. ERD(Entity Relationship Diagram)

2. DDL

  1. 데이터 유형
  2. CREATE TABLE
    • 테이블과 칼럼 정의
    • CREATE TABLE
    • 제약조건(CONSTRAINT)
    • 생성된 테이블 구조 확인
    • SELECT 문장을 통한 테이블 생성 사례
  3. ALTER TABLE
    • ADD COLUMN
    • DROP COLUMN
    • MODIFY COLUMN
    • DROP CONSTRAINT
    • ADD CONSTRAINT
  4. RENAME TABLE
  5. DROP TABLE
  6. TRUNCATE TABLE

3. DML

  1. INSERT
  2. UPDATE
  3. DELETE
  4. SELECT
  5. 산술 연산자와 합성 연산자

4. TCL

  1. 트랜잭션 개요
  2. COMMIT
  3. ROLLBACK
  4. SAVEPOINT

5. WHERE 절

  1. WHERE 조건절 개요
  2. 연산자의 종류
  3. 비교 연산자
  4. SQL 연산자
  5. 논리 연산자
  6. 부정 연산자
  7. ROWNUM, TOP 사용

6. 함수(FUNCTION)

  1. 내장 함수(BUILT-IN FUNCTION) 개요
  2. 문자형 함수
  3. 숫자형 함수
  4. 날짜형 함수
  5. 변환형 함수
  6. CASE 표현
  7. NULL 관련 함수
    • NVL/ISNULL 함수
    • NULL과 공집합
    • NULLIF
    • 기타 NULL 관련 함수 (COALESCE)

7. GROUP BY, HAVING 절

  1. 집계 함수(Aggregate Function)
  2. GROUP BY 절
  3. HAVING 절
  4. CASE 표현을 활용한 월별 데이터 집계
  5. 집계 함수와 NULL

8. ORDER BY 절

  1. ORDER BY 정렬
  2. SELECT 문장 실행 순서
  3. Top N 쿼리

9. JOIN

  1. JOIN 개요
  2. EQUI JOIN
    • 선수-팀 EQUI JOIN 사례
    • 선수-팀 WHERE 절 검색 조건 사례
    • 팀-구장 EQUI JOIN 사례
  3. Non EQUI JOIN
  4. 3개 이상 TABLE JOIN

SQL 활용

1. 표준 조인(STANDARD JOIN)

  1. STANDARD SQL 개요
    • 일반 집합 연산자
    • 순수 관계 연산자
  2. FROM 절 JOIN 형태
  3. INNER JOIN
  4. NATURAL JOIN
  5. USING 조건절
  6. ON 조건절
    • WHERE 절과의 혼용
    • ON 조건절 + 데이터 검증 조건 추가
    • ON 조건절 예제
    • 다중 테이블 JOIN
  7. CROSS JOIN
  8. OUTER JOIN
    • LEFT OUTER JOIN
    • RIGHT OUTER JOIN
    • FULL OUTER JOIN
  9. INNER vs OUTER vs CROSS JOIN 비

2. 집합 연산자(SET OPERATOR)

3. 계층형 질의와 셀프 조인

  1. 계층형 질의
    • Oracle 계층형 질의
    • SQL Server 계층형 질의
  2. 셀프 조인

4. 서브쿼리

  1. 단일 행 서브 쿼리
  2. 다중 행 서브쿼리
  3. 다중 칼럼 서브쿼리
  4. 연관 서브쿼리
  5. 그밖에 위치에서 사용하는 서브쿼리
    • SELECT 절에 서브쿼리 사용하기
    • FROM 절에서 서브쿼리 사용하기
    • HAVING 절에서 서브쿼리 사용하기
    • UPDATE문의 SET 절에서 사용하기
    • INSERT문의 VALUES절에서 사용하기
  6. 뷰(View)

5. 그룹 함수

  1. 데이터 분석 개요
  2. ROLLUP 함수
  3. CUBE 함수
  4. GROUPING SETS 함수

6. 윈도우 함수

  1. WINDOW FUNCTION 개요
  2. 그룹 내 순위 함수
    • RANK 함수
    • DENSE_RANK 함수
  3. 일반 집계 함수
    • SUM 함수
    • MAX 함수
    • MIN 함수
    • AVG 함수
    • COUNT 함수
  4. 그룹 내 행 순서 함수
    • FIRST_VALUE 함수
    • LAST_VALUE 함수
    • LAG 함수
    • LEAD 함수
  5. 그룹 내 비율 함수
    • RATIO_TO_REPORT 함수
    • PERCENT_RANK 함수
    • CUME_DIST 함수
    • NTILE 함수

7. DCL(DATA CONTROL LANGUAGE)

  1. DCL 개요
  2. 유저와 권한
    • 유저 생성과 시스템 권한 부여
    • OBJECT에 대한 권한 부여
  3. Role을 이용한 권한 부여

8. 절차형 SQL

  1. 절차형 SQL 개요
  2. PL/SQL 개요
    • PL/SQL 특징
    • PL/SQL 구조
    • PL/SQL 기본 문법(Syntax)
  3. T-SQL 개요
    • T-SQL 특징
    • T-SQL 구조
    • T-SQL 기본 문법(Syntax)
  4. Procedure의 생성과 활용
  5. User Defined Function의 생성과 활용
  6. Trigger의 생성과 활용
  7. 프로시저와 트리거의 차이점

SQL 최적화 기본 원리

1. 옵티마이저와 실행계획

  1. 옵티마이저
    • 규칙기반 옵티마이저
    • 비용기반 옵티마이저
  2. 실행계획
  3. SQL 처리 흐름도

2. 인덱스 기본

  1. 인덱스 특징과 종류
    • 트리 기반 인덱스
    • SQL Server의 클러스터형 인덱스
  2. 전체 테이블 스캔과 인덱스 스캔
    • 전체 테이블 스캔
    • 인덱스 스캔
    • 전체 테이블 스캔과 인덱스 스캔 방식의 비교

3. 조인 수행 원리

  1. NL Join
  2. Sort Merge Join
  3. Hash Join

SQL 고급활용 및 튜닝

1. 아키텍처 기반 튜닝 원리

1. 데이터베이스 아키텍처

  1. 아키텍처 개관
    • Oracle 아키텍처
    • SQL Server 아키텍처
  2. 프로세스
    • Server Processes
    • Background Processes
  3. 파일 구조
    • 데이터 파일
    • 임시 데이터 파일
    • 로그 파일
  4. 메모리 구조
    • DB Buffer Cache
    • Shared Pool
    • Log Buffer
    • PGA(Process Global Area)
  5. 대기 이벤트
    • 라이브러리 캐시 부하
    • 데이터베이스 Call과 네트워크 부하
    • 디스크 I/O 부하
    • 버퍼 캐시 경합
    • LOCK 관련 대기 이벤트

2. SQL 파싱 부하

  1. SQL 처리과정
    • SQL 파싱(Parsing)
    • SQL 최적화(Optimization)
  2. 캐싱된 SQL 공유
    • 실행계획 공유 조건
    • 실행계획을 공유하지 못하는 경우
  3. 바인드 변수 사용하기
    • 바인드 변수의 중요성
    • 바인드 변수 사용 시 주의사항
    • 바인드 변수 부작용을 극복하기 위한 노력
  4. Static SQL과 Dynamic SQL
    • Static SQL
    • Dynamic SQL
    • 바인드 변수의 중요성 재강조
  5. 애플리케이션 커서 캐싱

3. 데이터베이스 CALL과 네트워크 부하

  1. 데이터베이스 Call 종류
    • SQL 커서에 대한 작업 요청에 따른 구분
    • Call 발생 위치에 따른 구분
  2. 데이터베이스 Call과 성능
    • One SQL 구현의 중요성
    • 데이터베이스 Call과 시스템 확장성
  3. Array Processing 활용
  4. Fetch Call 최소화
    • 부분범위처리 원리
    • ArraySize 조정에 의한 Fetch Call 감소 및 블록 I/O 감소 효과
  5. 페이지 처리 활용
  6. 분산 쿼리
  7. 사용자 정의 함수/프로시저의 특징과 성능
    • 사용자 정의 함수/프로시저의 특징
    • 사용자 정의 함수/프로시저에 의한 성능 저하 해소 방안

4. 데이터베이스 I/O 원리

  1. 블록 단위 I/O
  2. 메모리 I/O vs. 디스크I/O
    • I/O 효율화 튜닝의 중요성
    • 버퍼 캐시 히트율(Buffer Cache Hit Ratio)
    • 네트워크, 파일시스템 캐시가 I/O 효율에 미치는 영향
  3. Sequential I/O vs. Random I/O
    • Sequential 액세스에 의한 선택 비중 높이기
    • Random 액세스 발생량 줄이기
  4. Single Block I/O vs. MultiBlock I/O
  5. I/O 효율화 원리
    • 필요한 최소 블록만 읽도록 SQL 작성
    • 최적의 옵티마이징 팩터 제공
    • 필요하다면, 옵티마이저 힌트를 사용해 최적의 액세스 경로로 유도

2. LOCK과 트랜잭션 동시성 제어

1. LOCK

  1. Lock 기본
    • Lock이란?
    • 공유 Lock과 배타적 Lock
    • 블로킹과 교착상태
  2. SQL Server Lock
    • Lock 종류
    • Lock 레벨과 Escalation
    • Lock 호환성
  3. Oracle Lock
    • 로우 Lock
    • 테이블 Lock

2. 트랜잭션

  1. 트랜잭션의 특징
  2. 트랜잭션 격리성
    • 낮은 단계의 격리성 수준에서 발생할 수 있는 현상들
    • 트랜잭션 격리성 수준

3. 동시성 제어

  1. 비관적 동시성 제어 vs. 낙관적 동시성 제어
    • 비관적 동시성 제어
    • 낙관적 동시성 제어
  2. 다중버전 동시성 제어
    • 일반적인 Locking 메커니즘의 문제점
    • 다중버전 동시성 제어
    • 문장수준 읽기 일관성
    • 트랜잭션 수준 읽기
    • Snapshot too old

3. 옵티마이저 원리

1. 옵티마이저

  1. 옵티마이저 소개
    • 옵티마이저란?
    • 옵티마이저 종류
    • SQL 최적화 과정
    • 최적화 목표
  2. 옵티마이저 행동에 영향을 미치는 요소
    • SQL과 연산자 형태
    • 옵티마이징 팩터
    • DBMS 제약 설정
    • 옵티마이저 힌트
    • 통계정보
    • 옵티마이저 관련 파라미터
    • DBMS 버전과 종류
  3. 옵티마이저의 한계
    • 옵티마이징 팩터의 부족
    • 통계정보의 부정확성
    • 바인드 변수 사용 시 균등분포 가정
    • 비현실적인 가정
    • 규칙에 의존하는 CBO
    • 하드웨어 성능
  4. 통계정보를 이용한 비용계산 원리
    • 선택도
    • 카디널리티
    • 히스토그램
    • 비용
  5. 옵티마이저
    • Oracle 힌트
    • SQL Server 힌트

2. 쿼리변환

  1. 쿼리변환이란?
  2. 서브쿼리 Unnesting
  3. 뷰 Merging
  4. 조건절 Pushing
    • 조건절(Predicate) Pushdown
    • 조건절(Predicate) Pullup
    • 조인 조건(Join Predicate) Pushdown
  5. 조건절 이행
  6. 불필요한 조인 제거
  7. OR 조건을 Union으로 변환
  8. 기타 쿼리 변환
    • 집합 연산을 조인으로 변환
    • 조인 칼럼에 IS NOT NULL 조건 추가
    • 필터 조건 추가
    • 조건절 비교 순서

4. 인덱스와 조인

1. 인덱스 기본 원리

  1. 인덱스 구조
    • 인덱스 기본
    • 인덱스 탐색
  2. 다양한 인덱스 스캔 방식
    • Index Range Scan
    • Index Full Scan
    • Index Unique Scan
    • Index Skip Scan
    • Index Fast Full Scan
    • Index Range Scan Descending
  3. 인덱스 종류
    • B*Tree 인덱스
    • 비트맵 인덱스
    • 함수기반 인덱스
    • 리버스 키 인덱스
    • 클러스터 인덱스
    • 클러스터형 인덱스/IOT

2. 인덱스 튜닝

  1. 인덱스 튜닝 기초
    • 범위 스캔이 불가능하거나 인덱스 사용이 아예 불가능한 경우
    • 인덱스 칼럼의 가공
    • 묵시적 형변환
  2. 테이블 Random 액세스 최소화
    • 인덱스 ROWID에 의한 테이블 Random 액세스
    • 인덱스 손익분기점
    • 테이블 Random 액세스 최소화 튜닝
  3. 인덱스 스캔범위 최소화
    • 인덱스 선행 칼럼이 범위조건일 때의 비효율
    • 범위조건을 In-List로 전환
    • 범위조건을 2개 이상 사용할 때의 비효율
  4. 인덱스 설계
    • 결합 인덱스 구성을 위한 기본 공식
    • 추가적인 고려사항
    • 인덱스 설계도 작성

3. 조인 기본 원리

  1. Nested Loop Join
    • 기본 메커니즘
    • NL Join 수행 과정 분석
    • NL Join의 특징
  2. Sort Merge Join
    • 기본 메커니즘
    • Sort Merge Join의 특징
  3. Hash Join
    • 기본 메커니즘
    • Build Input이 가용 메모리 공간을 초과할 때 처리 방식
    • Build Input 해시 키 값에 중복이 많을 때 발생하는 비효율
    • Hash Join 사용기준
  4. Scalar Subquery
    • Scalar Subquery의 캐싱 효과
    • 두 개 이상의 값을 리턴하고 싶을 때

4. 고급 조인 기법

  1. 인라인 뷰 활용
  2. 배타적 관계의 조인
  3. 부등호 조인
  4. Between 조인
    • 선분이력이란?
    • 선분이력 기본 조회 패턴
    • 선분이력 조인
    • Between 조인
  5. ROWID 활용

5. 고급 SQL 튜닝

1. 고급 SQL 활용

  1. CASE문 활용
  2. 데이터 복제 기법 활용
  3. Union All을 활용한 M:M 관계의 조인
  4. 페이징 처리
    • 일반적인 페이징 처리용 SQL
    • 뒤쪽 페이지까지 자주 조회할 때
    • Union All 활용
  5. 윈도우 함수 활용
  6. With 구문 활용

2. 소트 튜닝

  1. 소트와 성능
    • 메모리 소트와 디스크 소트
    • 소트를 발생시키는 오퍼레이션
    • 소트 튜닝 요약
  2. 데이터 모델 측면에서의 검토
  3. 소트가 발생하지 않도록 SQL 작성
    • Union을 Union All로 대체
    • Distinct를 Exists 서브쿼리로 대체
    • 불필요한 Count 연산 제거
  4. 인덱스를 이용한 소트 연산 대체
    • Sort Order By 대체
    • Sort Group By 대체
    • 인덱스를 활용한 Min, Max 구하기
  5. 소트 영역을 적게 사용하도록 SQL 작성
    • 소트 완료 후 데이터 가공
    • Top-N 쿼리
  6. 소트 영역 크기 조정

3. DML 튜닝

  1. 인덱스 유지 비용
  2. Insert 튜닝
    • Oracle Insert 튜닝
    • SQL Server Insert 튜닝
  3. Update 튜닝
    • Truncate & Insert 방식 사용
    • 조인을 내포한 Update 튜닝

4. 파티션 활용

  1. 파티션 개요
  2. 파티션 유형
    • Range 파티셔닝
    • Hash 파티셔닝
    • List 파티셔닝
    • Composite 파티셔닝
  3. 파티션 Pruning
    • 정적(Static) 파티션 Pruning
    • 동적(Dynamic) 파티션 Pruning
  4. 인덱스 파티셔닝
    • Local 파티션 인덱스 vs. Global 파티션 인덱스
    • Prefixed 파티션 인덱스 vs. NonPrefixed 파티션 인덱스
    • 인덱스 파티셔닝 가이드

5. 배치 프로그램 튜닝

  1. 배치 프로그램 튜닝 개요
    • 배치 프로그램이란
    • 배치 환경의 변화
    • 성능 개선 목표 설정
    • 배치 프로그램 구현 패턴과 튜닝 방안
  2. 병렬 처리 활용
    • Query Coordinator와 병렬 서버 프로세스
    • Intra-Operation Parallelism과 Inter-Operation Parallelism
    • 테이블 큐
    • IN-OUT 오퍼레이션
    • 데이터 재분배
    • pq_distribute 힌트 활용
    • 병렬 처리 시 주의사항

댓글

이 블로그의 인기 게시물