logo

[친절한 SQL 튜닝] 인덱스 튜닝 (2) : 인덱스 스캔 효율화, 인덱스 설계

* 관련 기술 스택이 없습니다
emoji

• 인덱스 선행 컬럼이 조건절에 있어야 인덱스 스캔 효율이 높아지며, 선행 컬럼이 모두 '=' 조건일 때 범위 검색 조건이 인덱스 스캔 범위를 결정한다. 범위 검색 조건 이후의 조건절은 스캔 범위를 줄이는 데 큰 역할을 하지 못한다.
• 인덱스 스캔 효율성을 높이기 위해 BETWEEN 조건을 IN-List로 변환할 수 있지만, IN-LIST 항목 개수가 많아지면 비효율적일 수 있다. IN-LIST 개수가 많지 않을 때만 유용하며, 데이터 분포와 수직적 탐색 비용을 고려해야 한다.
• 인덱스 칼럼에 범위 검색 조건을 남용하면 인덱스 스캔 비효율이 발생할 수 있으며, 특히 대량 테이블을 넓은 범위로 검색할 때 그 영향이 매우 클 수 있다. 필수 조건 칼럼을 인덱스 선두에 두고 액세스 조건으로 사용하면 LIKE/BETWEEN이 인덱스 필터 조건이어도 좋은 성능을 낼 수 있지만, 필수 조건이 변별력이 좋지 않을 때 문제가 발생한다.
• 고객ID가 변별력이 좋기 때문에 비교적 빠르게 조회되지만, 고객ID 값을 입력하지 않으면 인덱스에서 모든 거래 데이터를 스캔하면서 거래 일자 조건을 필터링하는 문제가 생긴다. 이 경우 인덱스를 [거래일자 + 고객ID] 순으로 구성해야 하지만, 고객ID 값이 입력되었을 때 생기는 비효율을 감수해야 한다. 고객ID가 NULL 허용 컬럼이고 실제 NULL 값이 입력돼 있다면 결과 집합에 누락될 수 있다.

thumbnail
북마크
공유하기
신고하기
23분 분량
조회수 201
profile-image강민성
일 년 전
Copyright © 2025. Codenary All Rights Reserved.