IT/DB
큐브리드 쿼리 플랜에서 비용 수치를 낮추는 방법은?
RM_
2025. 6. 24. 11:19
728x90
반응형
큐브리드(CUBRID)에서 쿼리 실행 계획(쿼리 플랜)의 비용(cost) 은 DB 엔진이 해당 쿼리를 처리하는 데 예상되는 리소스 사용량(디스크 I/O, CPU 사용량, 네트워크 등)을 추정한 값입니다.
이 비용 수치가 낮을수록 더 효율적인 쿼리입니다.
다음은 큐브리드에서 쿼리 비용을 낮추는 주요 방법들입니다:
✅ 1. 적절한 인덱스 사용
- 가장 중요한 요소입니다.
- WHERE, JOIN, ORDER BY, GROUP BY 등에 사용되는 컬럼에 인덱스를 생성하세요.
예시:
CREATE INDEX idx_table_a ON my_table(a);
- 문자열 날짜 비교 시에도 a 컬럼에 인덱스를 걸면 아래처럼 쿼리에서 인덱스를 활용할 수 있습니다:
WHERE a BETWEEN '20240501' AND '20240531'
인덱스를 사용하면 비용이 크게 줄어들며, INDEX SCAN 이 쿼리 플랜에 나타나야 좋습니다.
✅ 2. 불필요한 함수 사용 피하기
- 인덱스를 무력화하는 패턴:
WHERE TO_CHAR(date_column, 'YYYYMMDD') = '20240601' -- ❌
- 인덱스를 유지하려면 함수를 컬럼이 아니라 비교 값에 적용해야 합니다.
✅ 3. 테이블 통계 최신화
- 큐브리드는 옵티마이저가 통계를 기반으로 실행 계획을 결정합니다.
- 통계가 오래되면 잘못된 비용 추정 → 잘못된 실행 계획으로 이어질 수 있습니다.
통계 수집 명령:
UPDATE STATISTICS ON my_table;
주기적으로 수행하세요, 특히 데이터 양이 변했을 경우.
✅ 4. 불필요한 컬럼 조회 피하기
- SELECT * → 불필요한 디스크 I/O 발생 가능
- 필요한 컬럼만 조회:
SELECT name, age FROM my_table WHERE ...
✅ 5. LIMIT, EXISTS, JOIN 전략 최적화
- EXISTS vs IN: 소규모 서브쿼리 → IN, 대규모 → EXISTS 권장
- JOIN 시 꼭 필요한 테이블만 사용하고, 조인 순서를 확인하세요.
- 가능하면 INNER JOIN > LEFT JOIN > OUTER JOIN 순서로 성능이 좋습니다.
✅ 6. 서브쿼리를 WITH 절(CTE)로 리팩토링
- 중복 계산 방지, 실행 계획 단순화
WITH recent_data AS (
SELECT * FROM table WHERE a > '20240501'
)
SELECT * FROM recent_data WHERE ...
✅ 7. 쿼리 플랜 직접 확인하고 분석
- CUBRID에서 쿼리 플랜 확인:
EXPLAIN SELECT * FROM my_table WHERE a >= '20240501';
- ACCESS METHOD가 INDEX SCAN으로 나오면 좋고, FULL SCAN이면 인덱스를 고려해야 합니다.
- COST 숫자가 낮을수록 효율적입니다.
🎯 요약 체크리스트
항목 | 내용 |
✅ 인덱스 사용 | 조건 컬럼에 적절한 인덱스 생성 |
✅ 통계 최신화 | UPDATE STATISTICS 주기적 실행 |
✅ 함수 피하기 | WHERE 절에서 컬럼에 함수 쓰지 않기 |
✅ 필요한 컬럼만 | SELECT * 대신 필요한 컬럼만 |
✅ JOIN 최적화 | 조인 순서/조건 간소화 |
✅ EXPLAIN 사용 | 실제 비용 수치 확인 후 조정 |
300x250
반응형