일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 클린코드
- beautifulsoup
- DP
- c++
- N-Queen
- Python
- Backtracking
- sqld
- 오픽 초보
- MFC
- SW개발자를 위한 성능좋은 SQL
- clean code
- 서버아키텍처
- 게임서버개발
- BFS
- git
- 서버최적화
- Javascript
- 오픽
- 자청
- SQLD 이론
- 주석
- 백준
- 파이썬
- 폴링vs이벤트
- SQLD이론
- sqld요약
- 알고리즘
- 클린 코드
- 역행자
- Today
- Total
가취공부하자
SQLD 요약 4 SQL 최적화 기본 원리 본문
ROLE
= 많은 DBMS 사용자에게 개별적으로 많은 권한을 부여하는 번거로움과 어려움을 해소하기 위해 다양한 권한을 하나의 그룹으로 묶어놓은 논리적인 권한의 그룹이다.
절차형 SQL
- 분기, 반복이 가능한 모듈화 된 프로그램, DBMS에서 직접 실행됨
- 프로시저 (Procedure), 사용자 정의 함수 (User Defined Function), 트리거(Trigger)
- PL/SQL, [SQL Server] T-SQL
PL/SQL의 특징
- BLOCK 구조로 되어있어 각 기능별로 모듈화가 가능하다
- 변수/상수등을 선언해 SQL문장간 값을 교환한다.
- IF/LOOP 등의 절차형 언어 등을 사용해 절차적 프로그램이 가능하도록 한다.
- DBMS 정의 에러나 사용자 정의 에러를 정의해 사용할 수 있다.
+ PL/SQL 은 응용 프로그램의 성능을 향상시킨다.
+ PL/SQL은 여러 SQL 문장을 BLOCK으로 묶고 한 번에 BLCOK전체를 서버로 보내기에 통신량을 줄일 수 있다
+ PL/SQL은 동적 SQL 또는 DDL문장을 실행할 때 Execute Immediate 를 사용해야 한다.
+ Trigger는 Procedure과 다르게 Commit과 Rollback을 사용할 수 없다.
규칙 기반 옵티마이저 (RBO = Rule Based Optimizer)
- 규칙(우선순위)을 기반으로 실행계획을 생성
- 이용가능한 인덱스가 있다면 항상 인덱스를 사용하는 규칙 계획 생성
* 규칙 기반 우선순위
1. 행에 대한 고유 주소(ROWID)를 사용하는 방법 (=Single row by rowid)
2. 인덱스를 이용한 방법
3. 전체 테이블 액세스 방법
비용 기반 옵티마이저 (CBO = Cost Based Optimizer)
- 비용 (예상되는 소요시간, 자원 사용량)이 가장 적은 실행계획을 선택
- 비용에 따라 Full Scan이 유리하다고 판단할 수 있음.
- CBO의 실행계획에는 단계별 예상 비용 및 건수가 표현된다.
실행계획
- SQL 처리를 위한 실행 절차와 방법을 표현한 것
- 조인방법, 조인순서, 액세스 기법등이 표현된다.
- 동일 SQL문에 대해 실행계획이 달라진다 해서 , 실행결과가 달라지지 않는다.
SQL 처리 흐름도 (Access Flow Diagram)
- SQL문의 처리 절차를 시각적으로 표현한 것으로 인덱스 스캔 및 전체 테이블 스캔등의 액세스 기법을 표현할 수 있으며 성능적인 측면도 표현할 수 있다.
+ 인덱스 범위 스캔을 결과 건수만큼 반환하지만, 결과가 없으면 한건도 반환하지 않을 수 없다.
조인종류
- NL (Nested Loop) Join, Sort Join, Merge Join, Hash join
Nested Loop Join (NL Join)
- 중첩 for문과 같은 원리
- 비효율적, 오리 걸린다.
- 조인 조건의 인덱스 유무에 영향을 많이 받음
- OLPT 환경 (온라인 환경)의 목록 처리 업무에 많이 사용된다.
- 조인 컬럼에 적당한 인덱스가 없어서 자연조인(Natural Join)이 효율적일 때 유용하다.
- 유니크 인덱스를 활용해 수행 시간이 적게 걸리는 소량 테이블을 온라인으로 조회하는 경우 유용
Hash Join
- Equi Join에서만 동작한다.
- 칼럼의 인덱스를 사용하지 않기 때문에 조인 칼럼에 인덱스가 존재하지 않을 경우에도 사용할 수 있는 조인 기법이다.
- 정렬할 작업이 필요 없어 정렬이 부담되는 대량 배치 작업에 유리
- Driving Table(outer Table)이 성능에 매우 중요한 요인.
Sort Merge Join
- 조인칼럼에 적당한 인덱스가 없어 NL(Nested Loop)가 비효율적일 때 사용 가능
- NL과 차이점, 두 테이블을 조인 칼럼을 기준으로 데이터를 정렬시킬 후 JOIN 하는 방식
- Driving Table 개념이 필요하지 않은 조인 방식
- 조인 조건의 인덱스 유무에 영향을 받지 않는다.
+ DW등의 데이터 집계 업무에서 많이 사용되는 Join은 Hash Join, Sort Merge Join이다.
NL Join | Sort Merge Join | Hash Join |
OLPT 환경 | PGA 환경 | DW환경 |
Non-Equi Join | Equi Join | |
인덱스 유무에 영향 O | 인덱스 유무에 영향 X | 정렬작업 필요 X 대량 데이터 배치 작업에 유리 |
Outer Table(Driving Table) 중요 | Outer Table 중요 X | Outer Table (Driving Table) 중요 |
기출문제
'SQL' 카테고리의 다른 글
SQLD 요약 이라쓰고 오답노트라 읽는다.. (엔터티 종류, ERD 작성순서, 식별자 종류 등..) (1) | 2022.09.03 |
---|---|
SQLD 과목 1 데이터 모델링의 이해 (정규화, 트랜잭션 슈퍼타입/서브타입, 분산DB) (0) | 2022.09.03 |
SQLD 요약 3 SQL 활용 (0) | 2022.08.28 |
SQLD 요약2 SQL 기본 및 활용 (0) | 2022.08.27 |
SQLD 요약 1 (데이터 모델링의 이해~트랜잭션) (2) | 2022.08.27 |