일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- index fast full scan
- 클린코드
- B*Tree인덱스
- Oracle
- leetcode215
- B*Tree인덱스구조
- 친절한SQL튜닝
- 오라클튜닝
- 로버트C마틴
- 파이썬
- table full scan
- 알고리즘
- 리눅스
- 클린 코드
- join
- db
- database
- SQLD
- B*Tree
- 오라클
- 조인
- 데이터모델링
- intellij
- 결합인덱스구조
- SQLP
- heapq
- RAC
- SQL튜닝의시작
- clean code
- 리트코드215
- Today
- Total
목록친절한SQL튜닝 (6)
개발노트
테이블에 저장된 데이터를 읽는 방식은 2가지다.- 테이블 전체를 스캔해서 읽는 방식 : Table Full Scan - 인덱스를 이용해서 읽는 방식 : Index Range Scan Table Full Scan 이란시퀀셜 액세스와 Multiblock I/O 방식으로 디스크 블록을 읽는다. 한 블록에 속한 모든 레코드를 한 번에 읽어 들이고, 캐시에서 못 찾으면 '한 번의 수면(I/O Call)을 통해 인접한 수십~수백 개의 블록을 한꺼번에 I/O하는 메커니즘이다. 이 방식을 사용하는 SQL 은 스토리지 스캔 성능이 좋아지는 만큼 성능도 좋아진다. 그러나 시퀀셜 액세스와 multiblock i/o 가 아무리 좋아도 수십~수백 건의 "소량" 데이터를 찾을 때 수백만~수천만 건 데이터를 스캔하는 것은 비효율적..
테이블에서 데이터를 찾는 방식 2가지1. 테이블 전체를 스캔 2. 인덱스를 이용 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다. 그래서 온라인 트랜잭션 처리(Online Transaction Process, OLTP) 시스템에서는 소량 데이터를 주로 검색하므로 인덱스 튜닝이 무엇보다 중요하다. 인덱스란대용량 테이블에서 필요한 소량의 데이터만 빠르게 효율적으로 액세스하기 위해 사용하는 오브젝트다. DBMS 는 일반적으로 B*Tree(Balanced Tree) 인덱스를 사용한다. B*Tree 구조를 가지는 인덱스 구조 B*Tree 구조는 루트 블록, 브랜치 블록, 리프 블록으로 구성되어 있다. 루트와 브랜치 블록에 있는 각 레코드는 하위 블록에 대한 주소값을 가지고 있다. 키값은 하위 블록에 저장..
일반적인 조인 메서드 선택 기준 1) 소량 데이터 조인 → nl 조인 2) 대량 데이터 조인 → 해시 조인 3) 대량 데이터 조인인데 해시 조인으로 처리 불가할 때 → 소트 머지 조인 ** 조인 조건식이 등치(=)가 아니거나, 카테시안 곱일 때 수행빈도가 매우 높은 쿼리에 대한 조인 메서드 선택 기준 1) (최적화된) nl 조인과 해시 조인 성능이 같다면 → nl 조인 2) 해시 조인이 약간 더 빠르면 → nl 조인 => 수행빈도가 높은 소량 데이터 조인은 설령 해시 조인이 약간 더 빠르더라도 nl 조인을 선택하라 3) nl 조인보다 해시조인이 매우 빠르면 → 해시 조인 nl 조인을 가장 먼저 고려해야 하는 이유는? nl 조인에서 사용하는 인덱스는 공유 및 재사용하는 자료구조다. 반면, 해시테이블은 단 ..
기본 메커니즘 1. build 단계 : 작은 쪽 테이블(build input)을 읽어 해시 테이블(해시 맵)을 생성한다. 2. probe 단계 : 큰 쪽 테이블(probe input)을 읽어 해시 테이블을 탐색하면서 조인한다. * use_hash 힌트로 해시조인을 유도한다. SQL 수행과정 SELECT /*+ ordered use_hash(E) */ E.EMPNO, E.ENAME, E.SAL, D.DNAME FROM DEPT D INNER JOIN EMP E ON D.DEPTNO = E.DEPTNO AND E.SAL > 1500 AND E.JOB = 'SALESMAN' WHERE D.DNAME = 'SALES' ; Execution plan -----------------------------------..
PGA 오라클 서버 프로세스는 SGA 에 공유된 데이터를 읽고 쓰면서, 동시에 자신만의 고유 메모리 영역 PGA 를 갖는다. PGA 는 프로세스에 종속적인 고유 데이터를 저장하는 용도로 사용한다. 할당받은 PGA 공간이 작아 데이터를 모두 저장할 수 없을 때는 Temp 테이블스페이스를 이용한다. * temp tbs 는 물리적 disk 형태로 존재한다. PGA 는 다른 프로세스와 공유하지 않는 메모리 공간으로, 래치 메커니즘이 불필요하다. → 같은 양의 데이터를 읽더라도 SGA 버퍼캐시에서 읽을 때보다 훨씬 빠르다. Sort Merge Join 기본 메커니즘 이름이 의미하는 것처럼 2단계로 진행한다. 1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬한다. 2. 머지 단계 : 정렬한 양쪽 집합을 서로..
NL 조인 특징 요약 1. 랜덤 액세스 위주의 조인 방식 *랜덤 액세스는 레코드 하나를 읽기 위해 블록을 통째로 읽는다. 2. 조인을 한 레코드씩 순차적으로 진행 → 부분범위 처리가 가능, Driving 테이블 처리 범위에 따라 전체 일량 결정 3. 인덱스 구성 전략이 중요 따라서, NL 조인은 소량 데이터를 주로 처리하거나, 부분범위 처리가 가능한 온라인 트랜잭션 처리(OLTP) 시스템에 적합한 조인 방식이라고 할 수 있다. 기본 메커니즘 NL JOIN = Nested Loop Join SELECT E.사원명, C.고객명, C.전화번호 FROM 사원 E, 고객 C WHERE E.입사일자 >= '19960101' AND C.관리사원번호 = E.사원번호 사원 : Outer Table, Driving Tab..