Tuning/INDEX 5

정렬제거를 위한 인덱스 선정 방법

인덱스를 이용해야 우리가 원하는 조회 성능을 보장 받을 수 있음 하지만 인덱스를 많이 생성하면 여러가지 부작용 발생 인덱스 부작용을 최대한 방지하려면 최적의 결합 칼럼 인덱스를 생성해야 하며 단일 칼럼 인덱스는 자제해야함 정렬의 제거는 인덱스에 의해 좌우 정렬을 제거하려면 어디엔가 정렬된 데이터 존재해야함 DB에서 데이터를 저장하는 장소는 TABLE과 INDEX 인덱스는 인덱스를 구성하는 칼럼의 값이 실제로 저장 테이블과 인덱스 둘 중 한곳에 정렬된 데이터가 저장된다면 그 것을 이용하여 자동으로 정렬된 값 추출 가능 TABLE : 데이터가 INSERT되는 순서에 의해 저장되므로 어떤 칼럼에 의해 정렬된 데이터 저장되지 않음 INDEX : 인덱스를 구성하는 칼럼에 의해 정렬된 데이터 저장 - 인덱스의 첫번..

Tuning/INDEX 2023.09.21

추출 랜덤 액세스와 정렬 랜덤 액세스

무조건 많은 개수의 칼럼으로 결합 인덱스를 생성하는 것은 아니지만 그만큼 인덱스의 유연성 증가 유연성에 의해 테이블에 10개의 인덱스가 필요할 수도 있고 5개의 인덱스로 모든 액세스 경로를 수용 할 수도 있음 최소의 인덱스로 모든 액세스 경로를 최적화하기 위해서는 결합 칼럼 인덱스의 선정에 신중해야함 추출 랜덤 액세스 : SELECT절의 데이터를 추출하기 위해 인덱스 액세스 후 테이블을 액세스해야 하는 랜덤 액세스 정렬 랜덤 액세스 : ORDER BY절, GROUP BY 절 등에 의해 인덱스 액세스 후 테이블을 액세스 해야하는 랜덤 액세스 종류 발생위치 추출데이터 확인 랜덤 액세스 WHERE절/ HAVING절 감소 또는 동일 정렬 랜덤 액세스 ORDER BY절/ GROUP BY절 동일 추출 랜덤 액세스 ..

Tuning/INDEX 2023.09.21

랜덤액세스 이해

SQL이 인덱스를 이용해야 할 지 아니면 인덱스를 이용하지 말아야 할지를 결정하는 것이 SQL 최적화의 첫걸음 인덱스를 이용해야 하는 SQL을 구분하여 해당 SQL은 최적의 인덱스를 이용해야한다. 랜덤액세스란 ? 데이터 저장 블록을 한번에 여러 개 액세스 하는 것이 아니라 한번에 하나의 블록만을 액세스하는 방식 전체테이블 스캔 테이블 전체 스캔의 경우는 여러개의 블록을 한번에 액세스하기 때문에 여러 블록을 액세스하는 다중 블록 I/O 수행 한번에 여러개의 블록을 액세스하며 같은 양에 데이터에 대해 적은 횟수의 디스크I/O 발생하여 성능 향상 랜덤 액세스 발생이유 인덱스를 액세스하여 확인한 ROWID를 이용하여 테이블을 액세스 하는 경우 랜덤 액세스 발생 ROWID는 해당 데이터를 찾아가는 유일한 주소 값..

Tuning/INDEX 2023.09.21

결합인덱스 선정하는 우선 순위

결합 인덱스 구성 칼럼 순서 1. 컬럼이 사용한 연산자에 의한 인덱스 컬럼 2. 선정랜덤 액세스를 고려한 인덱스 컬럼 선정 3. 정렬 제거를 위한 인덱스 컬럼 선정 4. 단일 컬럼의 분포도를 고려한 인덱스 컬럼 선정 조건에 따른 인덱스 구성 - 점 조건 + 점 조건 : 두 조건에 의해 처리 범위 감소 - 점 조건 + 선분 조건 : 두 조건에 의해 처리 범위 감소 - 선분 조건 + 선분 조건 : 앞의 선분 조건에 의해 처리 범위 감소 - 선분 조건 + 점 조건 : 앞의 선분 조건에 의해서만 처리 범위 감소 점/선 조건을 결정하는 것은 연산자로 결합 인덱스시 가장 먼저 고려대상이 되는것이 연산자 단일 칼럼 엑세스만으로 해결 할 수 없는 데이터 베이스의 성능을 결합 칼럼 인덱스로 해결가능 결합 인덱스 구성하는..

Tuning/INDEX 2023.09.21

SQL 성능을 결정하는 처리 범위

요약 인덱스의 가장 중요 요소는 처리범위를 최소화 시키는것으로 결합 칼럼 인덱스의 효율이 높다. 결합 칼럼 인덱스 생성을 위해서는 점 조건과 선분조건 순서에 의해 처리범위가 변한다는 것을 고려하여 생성 필요하다. Index 사용이유 대용량의 데이터에서 원하는 적은 데이터 추출을 위해 SQL 성능 결정요인 처리 범위의 양 랜덤 액세스의 양 정렬의 양 처리범위란? 액세스 해야하는 데이터가 적음을 의미 액세스 해야하는 데이터가 적다면 인덱스를 이용하여 성능 보장 가능 예제로 이해하기 SELECT 카드번호, 사용액 FROM 거래내역 WHERE 거래일자 = '200803' AND 사용구분 = '정상' 위의 SQL로 생성 가능한 Index는 거래일자 Index 사용구분 Index 거래일자 + 사용구분 Index 사..

Tuning/INDEX 2023.09.20