반응형
Intro
1장 DBMS 아키텍처
W 생각 | R 생각 |
DB는 다양한 트레이드 오프의 균형을 잡으려는 미들웨어 | |
성능관점 데이터의 위치 결정이 중요 | |
DB는 갱신보다 검색에 비중을 두고 설계 | |
SQL 실행 가능한 절차로 변환하고자 실행 계획 만듦 | |
Quiz | |
DBMS의 데이터 캐시관리 위한 알고리즘 | LRU(Least Recently Use) |
2장 SQL 기초
W 생각 | R 생각 |
SQL은 비절차형 언어, 간단하고 직관적 작성 | |
CASE 식은 조건분기 표현 도구 | |
쿼리는 입력과 출력을 모두 테이블에 있는 것을 기준으로 구현 | |
집합이론 바탕 연산자 : Group by, Union, Intersect | |
윈도우 함수는 Group by 절에서 집약기능을 제외하고 자르는 기능만 추구 | |
Quiz | |
Adress 테이블에서 성별 별로 나이 순위를 매기는 select 문?? | select ,, ,,, b.rank from adress a, adress b where a.이름 = b.이름 group by 성별 order by age desc |
select , , , RANK() over(partition by sex order by age desc) rnk_desc from address; |
3장 SQL의 조건 분기
W생각 | R 생각, DO |
- 정확한 판단 없는 UNION 사용 지양 | |
- select 문에서 CASE 사용, where구에서 조건분기 지양 | Select , , , CASE WHEN col = 2020 THEN Price_ex WHEN col = 2021 THEN Price_in END AS price |
- 집계와 조건 분기 | |
- UNION 실행 시 실행계획 풀 스캔 2회 | |
- CASE 식 사용 시 실행계획 풀 스캔 1회 | select A, , , , sum(CASE WHEN sex='1' THEN pop ELSE 0 END) AS POP_M sum(CASE WHEN sex='2' THEN pop ELSE 0 END) AS POP_W from tb group by A |
집약결과로 조건분기 | |
- UNION 사용한 조건분기 | GROUP BY 절로 집약 후 HAVING 절로 조건 분기, UNION 결합 |
- CASE 식 사용 | select emp_name, CASE WHEN count(*) = 1 then MAX(team) WHEN count(*) = 2 then '2겸직' WHEN count(*) = 3 then '3겸직' END AS TEAM FROM E GROUP BY emp_name; |
UNION을 사용하는 것이 성능적으로 좋은 경우 | |
SQL의 성능은 저장소 IO 감소 | |
UNION 조건 분기 표현 재검토 | |
IN 또는 CASE 식 조건분기 표현 필요 | |
QUIZ | |
4장 집약과 자르기
GROUP BY 구 또는 윈도우 함수의 PARTITION BY 구는 집합을 자를 때 사용 | |
GROUP BY 구 또는 윈도우 함수는 내부적으로 해시 또는 정렬 처리를 실행 | |
GROUP BY 구 또는 윈도우 함수와 CASE 식을 함께 사용 | |
QUIZ | |
GROUP BY 연산에 정렬과 해시 중 어떤것이 쓰이는가? | |
5장 반복문
반복문 의존증 | |
SQL은 반복문을 설계에서 제외함 | |
반복계의 장점 | |
반복계 성능 튜닝 가능성 없음 | |
반복계 사용 판단 필요 | |
QUIZ | |
SQL 구문 상관 서브쿼리.. | |
6장 결합
결합은 SQL 성능 문제 요인 | |
기본은 Nested Loops | |
배치에선 HASH | |
Nested Loops 효율적 동작 위해, 작은 구동 테이블과 내부테이블 인덱스 필요 |
|
결합 알고리즘이 복잡하면 실행 계획 변동 유발 | |
7장 서브쿼리
서브쿼리 폐해 - 연산비용 - 데이터 IO 비용 - 최적화 받을 수 없음 |
|
서브쿼리는 복잡한 문제를 분할 편리한 도구 | |
SQL 성능 결정 요인 IO 절대적 | |
윈도위함수로 대체하면 성능 개선 가능성 있음 | |
결합 대상 레코드 수를 사전에 압축해두면 성능 개선 가능 | |
8장 SQL순서
ROW_NUMBER() OVER (ORDER BY col) AS seq | |
SQL 절차 지향형이 윈도우 함수로 부활 | |
윈도우 함수 사용, 가독성 향상 | |
윈도우 함수는 결합 또는 테이블접근 줄이므로 성능향상 기대 | |
시쿼스 객체 또는 Identity 필드는 성능 문제 원인, 주의 필요 | |
9장 갱신과 데이터 모델
SQL 효율적으로 갱신 다중 필드 할당, 서브쿼리, CASE식, MERGE 구문 |
|
모든 문제를 코딩으로 해결 불필요 | |
문제 해결과정에서 모델 변경 고려, 변경시 복귀 불가 | |
10장 인덱스 사용
RDB 인덱스 구조 | B-Tree, 비트맵( 데이터 파일을 비트 플래그로 변환, 카디널리티가 낮은 필드에 효과) , 해시 인덱스, <B+Tree 는 파일 시스템에 사용> |
카티널리티와 선택률에 따라 성능결정 | |
선택률을 제어하기 위해 UI설계 변경 필요있음 | |
선택률이 높은 경우 인덱스 온리 스캔 활용 | |
인덱스 사용한 성능 개선도 IO 비용 감소 노력 중 하나 | |
QUIZ | |
데이터 마트 채택시 주의점 (목적: 테이블의 크기를 작게해 IO양을 줄이는 것) |
데이터 최신성 데이터 마트 크기 마트 수 배치 윈도우 |
반응형
'도전기 > SQLP' 카테고리의 다른 글
Do it SQL__DO_IT_05_(based SQL Server) (0) | 2024.09.12 |
---|---|
Do it SQL__DO_IT_04_(based SQL Server) (0) | 2024.09.01 |
Do it SQL__DO_IT_03_(based SQL Server) (0) | 2024.08.30 |
ch06_I/O 효율화의 원리_오라클 성능 고도화 원리와 해법_I (0) | 2024.08.29 |
ch05_데이터베이스 Call 최소화 원리_[오라클 성능 고도화 원리와 해법_I] (0) | 2024.08.29 |