본문 바로가기
728x90

DB/일반5

[친절한SQL튜닝 요약 정리] 3-1. 테이블 액세스 최소화 친절한SQL튜닝 책 요약 정리 1. 테이블 랜덤 액세스 (1) 인덱스에 대한 맹신 : 인덱스는 생각보다 느리다! (2) 인덱스에 갖는 ROWID는 물리적 주소? 논리적 주소? ( ROWID = DBA(Data Block Address) + 로우 번호 ) : 논리적 주소이다. (3) 메인 메모리DB와 비교 메인 메모리 DB : 데이터를 모두 메모리에 로드해놓고 메모리를 통해서만 I/O를 수행하는 DB 인덱스는 물리적주소(포인터)를 갖는다. 그렇기 때문에 빠르다. 비용이 0에수렴 (4) I/O 메커니즘 복습 : 디스크에서 블록을 읽기 전 버퍼캐시부터 찾아본다. 읽고자 하는 DBA를 해시함수에 입력 후 해시 체인을 찾고 거기서 버퍼헤더를 찾는다. 이처럼 인덱스 ROWID를 이용한 테이블 액세스는 생각보다 고비.. 2020. 12. 27.
[친절한SQL튜닝 요약 정리] 2-3. 인덱스 확장기능 사용법 친절한SQL튜닝 책 요약 정리 복습 : Index를 로 설정하면. 이름순으로 정렬되고 이름이 같으면 나이순으로 정렬된다. where 절에 나이 조건만 입력할 경우 해당 record가 전체에 퍼져 있으므로 전체 스캔을 하게 된다. 즉, 시작점을 찾을 수 없는 것이다. 그러므로 인덱스 선두 컬럼인 이름이 포함돼 있는것이 중요하다. 1. Index Range Scan : 가장 일반적이다. 수직적으로 탐색한 후에 필요한 범위만 스캔. 인덱스 선두 컬럼을 가공하지 않은 상태로 사용해야 하는 것을 주의. 그렇지 않으면 index full scan을 해버리게 된다. 2. Index Full Scan : 말그대로 인덱스 전체를 탐색한다. 옵티마이저가 Index full scan 과 table full scan 효율성을.. 2020. 12. 27.
[친절한SQL튜닝 요약 정리] 2-2. 인덱스 기본 사용법 친절한SQL튜닝 책 요약 정리 1. 인덱스를 사용한다는 것 : 인덱스의 시작점을 정확히 지정해주고 원하는 만큼 스캔하는 것. 이것을 Index Range Scan이라고 한다. 2. Range Scan을 할 수 없는 이유 : 인덱스의 시작점을 찾을 수 없기 때문에. 아래와 같은 SQL은 시작점을 찾을 수 없다. *WHERE절 LIKE 사용 Ex) WHERE SUBSTR(생년월일, 5, 2) = '05' WHERE NVL(주문수량, 0) < 100 WHERE 업체명 LIKE '%대한%' 3. 더 중요한 인덱스 사용 조건 : 순으로 인덱스를 구성할경우 소속팀 순으로 정렬하고, 소속팀이 같으면 사원명순, 사원명이 같으면 연령순으로 정렬된다 Ex) SELECT * FROM 사원 WHERE 사원명 = '홍길동' 경.. 2020. 12. 27.
[친절한SQL튜닝 요약 정리] 2-1. 인덱스 구조 및 탐색 친절한SQL튜닝 책 요약 정리 1. 미리보는 인덱스 튜닝 (1) 데이터를 찾는 두가지 방법 > 테이블 전체 스캔 인덱스 이용 (2) 인덱스 튜닝의 두 가지 핵심 요소 > 인덱스 스캔 효율화 튜닝 : 인덱스를 적게 스캔 Ex) 1.0 ~ 1.5 의 홍길동들을 찾을경우, 시력정렬 vs 이름 정렬 에서 후자가 효율적 랜덤 액세스 최소화 튜닝 : 스캔한 인덱스를 통해 조회할 테이블의 행 개수 최소화. 더 중요 Ex) 많은 인덱스를 스캔하더라도, 그 중 조건에 부합해 테이블에 접근하는 유효 인덱스가 적은 것 2. 인덱스 구조 - Balanced Tree 구조이다. - 정렬되어 있다. - 첫 노드는 root, 중간 노드들은 branch, 끝 노드는 leaf 라고 한다. - LMC는 값이 없고, 가장 작은 값을 가진.. 2020. 12. 27.
728x90