반응형
- 코딩테스트 연습 > SUM, MAX, MIN > 가격이 제일 비싼 식품의 정보 출력하기
1. 정렬->1개만 출력
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;
2. max
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
성능 비교
- 서브쿼리 vs. 정렬 및 제한
- 쿼리 1번은 테이블을 가격 기준으로 내림차순 정렬한 다음 상위 한 행만 가져옵니다. 인덱스가 제대로 설정되어 있다면, 이 방식이 더 효율적일 수 있습니다. 인덱스를 사용하여 정렬 작업이 빠르게 수행될 수 있기 때문입니다.
- 쿼리 2번은 서브쿼리를 사용하여 FOOD_PRODUCT 테이블의 최대 가격을 먼저 계산합니다. 그런 다음 이 최대 가격과 일치하는 행을 찾습니다. 서브쿼리를 사용하기 때문에 두 번의 검색 작업이 필요합니다. 이 방식은 특히 대용량 테이블에서 성능에 영향을 미칠 수 있습니다.
- 인덱스 사용 여부
- 쿼리 1번은 가격 기준으로 정렬하는 작업에 인덱스를 효과적으로 활용할 수 있습니다. 가격에 인덱스가 있다면, 내림차순 정렬과 LIMIT 1 작업이 빠르게 수행될 수 있습니다.
- 쿼리 2번은 서브쿼리가 최대 가격을 찾는 작업을 먼저 수행합니다. 이 작업에 인덱스가 사용될 수 있습니다. 그러나 메인 쿼리가 다시 한 번 검색을 수행해야 하므로, 인덱스를 활용하더라도 효율성이 떨어질 수 있습니다.
결론
일반적으로 쿼리 1번이 성능 면에서 더 나을 가능성이 높습니다. 이유는 정렬과 LIMIT를 사용하여 인덱스를 효율적으로 활용할 수 있기 때문입니다. 물론, 실제 성능은 데이터베이스 엔진, 데이터의 분포, 인덱스의 존재 여부 등에 따라 달라질 수 있습니다.
따라서, 대용량 데이터셋을 다루고 있고, PRICE 컬럼에 인덱스가 설정되어 있다면 쿼리 2번을 사용하는 것이 더 나은 선택이 될 것입니다. 반면에, 데이터베이스의 구체적인 상황을 고려하여 실제 성능 테스트를 수행하는 것도 좋은 방법입니다.
반응형
'TIL' 카테고리의 다른 글
[프로그래머스] 예산: O(n^2) -> O(n log n) (1) | 2024.10.05 |
---|---|
[프로그래머스] 큰 수 만들기: 문자열보다 리스트 사용하기 (0) | 2024.10.03 |
NestJS | TypeORM: entity 정의(soft delete, 추상클래스) (0) | 2022.11.21 |
NestJS | @nestjs/config 패키지를 활용한 환경변수 관리 -> db연결 (0) | 2022.11.21 |
NestJS | production/development환경 각각 다른 DB 사용하기(dotenv) (2) | 2022.11.19 |