'SQLP' 카테고리의 글 목록 (2 Page)
세모로그

SQLP
[친절한 SQL 튜닝] 5. 소트 튜닝 [3]
2025.01.19
5.3 인덱스를 이용한 소트 연산 생략인덱스는 항상 키 컬럼 순으로 정렬된 상태를 유지이를 활용하면 SQL에 Order By 또는 Group By 절이 있어도 소트 연산 생략 가능더하여 Top N 쿼리 특성을 결합하면, 온라인 트랜잭션 처리 시스템에서 대량 데이터를 조회할 때 매우 빠른 응답 속도를 낼 수 있음또한 특정 조건을 만족하는 최소값 또는 최대값도 빨리 찾을 수 있어 이력 데이터를 조회할 때 매우 유용 5.3.1 Sort Order By 생략 인덱스 선두 컬럼을 [종목코드+거래일시] 순으로 구성하지 않으면 아래 SQL에서는 소트 연산을 생략할 수 없다. SELECT 거래일시, 체결건수, 체결수량, 거래대금 FROM 종목거래 WHERE 종목코드 = 'KR123456' ORDER BY 거래일시 위..
SQLP
[친절한 SQL 튜닝] 5. 소트 튜닝 [2]
2025.01.19
SQL을 작성할 때 불필요한 소트가 발생하지 않도록 주의해야 한다. Union, Minus, Distinct 연산자는 중복 레코드를 제거하기 위한 소트 연산을 발생시키므로 꼭 필요한 경우에만 사용하고, 성능이 느리다면 소트 연산을 피할 방법이 있는지 찾아봐야 한다. 5.2.1 Union vs Union AllUnion을 사용하면 옵티마이저는 상단과 하단 두 집합 간 중복을 제거하려고 소트 작업을 수행한다.Union All은 중복을 확인하지 않고 두 집합을 단순히 결합하므로 소트 작업을 수행하지 않는다.성능을 위해서라면 Union All을 사용하자. 하지만 Union을 Union All로 변경하려다 결과 집합이 달라질 수 있으므로 주의해야 한다. Union All을 사용하려면 데이터 모델에 대한 이해와 집..

SQLP
[친절한 SQL 튜닝] 5. 소트 튜닝 [1]
2025.01.19
5.1 소트 연산에 대한 이해소트는 PGA에 할당한 Sort Area에서 이루어진다. 메모리 공간인 Sort Area가 다 차면, 디스크 Temp 테이블스페이스를 활용한다. 소트 유형메모리 소트(In-Memory Sort) : 전체 데이터의 정렬 작업을 메모리 내에서 완료하는 것. "Internal Sort"라고도 불림디스크 소트(To-Disk Sort) : 할당받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 것. "External Sort"라고도 불림 소트할 대상 집합을 SGA 버퍼캐시를 통해 읽어 들이고, 일차적으로 Sort Area에서 정렬 시도(양이 많을 때는 정렬된 중간집합을 Temp 테이블스페이스에 임시 세그먼트를 만들어 저장함..

SQLP
[친절한 SQL 튜닝] 2. 인덱스 기본 [3]
2025.01.15
2.3.1 Index Range ScanIndex Range Scan은 BTree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식이다.아래 그림처럼 인덱스 루트에서 리프 블록까지 수직적으로 탐색한 후에 '필요한 범위(Range)만' 스캔한다.선두 컬럼을 가공하지 않은 상태로 조건절에 사용성능은 인덱스 스캔 범위, 테이블 액세스 횟수를 얼마나 줄일 수 있느냐로 결정된다.(인덱스 잘 탄다고 되는 게 아님!) 2.3.2 Index Full ScanIndex Full Scan은 아래 그림처럼 수직적 탐색없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식이다.대개 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택된다.인덱스 선두 컬럼이 조건절에 없으면 옵티마이저는 먼저 Table ..
SQLP
[친절한 SQL 튜닝] 2. 인덱스 기본 [2]
2025.01.14
2.2.1 인덱스를 사용한다는 것인덱스 컬럼(선두 컬럼)을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있음'인덱스를 정상적으로 사용한다'는 표현은 리프 블록에서 스캔 시작점을 찾아 거기서부터 스캔하다가 중간에 멈추는 것을 의미함, 즉 리프 블록 일부만 스캔하는 Index Range Scan을 의미함인덱스 컬럼을 가공해도 인덱스를 사용할 수는 있지만, 스캔 시작점을 찾을 수 없고 멈출 수도 없어 리프 블록 전체를 스캔해야만 함, 즉 일부가 아닌 전체를 스캔하는 Index Full Scan 방식으로 작동함 2.2.2 인덱스를 Range Scan 할 수 없는 이유인덱스 컬럼을 가공했을 때 인덱스를 정상적으로 사용할 수 없는 이유는 인덱스 스캔 시작점을 찾을 수 없기 때문이다.Index Range Scan..