몸과 마음이 건전한 SW 개발자

프로그래머스 Lv. 2 가격이 제일 비싼 식품의 정보 출력하기 SQL 본문

SQL

프로그래머스 Lv. 2 가격이 제일 비싼 식품의 정보 출력하기 SQL

스위태니 2024. 1. 1. 11:34

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/131115

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드 1

SELECT 
    PRODUCT_ID,
    PRODUCT_NAME,
    PRODUCT_CD,
    CATEGORY,
    PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;

정답 코드 2

SELECT 
    PRODUCT_ID,
    PRODUCT_NAME,
    PRODUCT_CD,
    CATEGORY,
    PRICE
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

Key Point

성능확인

두 SQL 쿼리는 모두 가장 비싼 음식 제품의 정보를 조회하는 것을 목적으로 합니다. 하지만 성능 측면에서 다른 접근 방식을 취하고 있습니다.

 

첫 번째 쿼리는 ORDER BY PRICE DESC LIMIT 1을 사용하여 가장 비싼 제품을 찾습니다. 이 방식은 전체 테이블을 가격 내림차순으로 정렬한 후 가장 상단의 데이터(가장 비싼 제품)만을 반환합니다. 대규모 데이터에서는 전체 테이블을 정렬하는 과정에서 성능 저하가 발생할 수 있습니다.

 

두 번째 쿼리는 WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)를 사용합니다. 이는 먼저 SELECT MAX(PRICE)를 통해 가장 높은 가격을 찾은 다음, 그 가격과 일치하는 제품을 조회합니다. 이 방식은 가격이 최대인 제품을 직접 탐색하기 때문에, 전체 테이블을 정렬하는 과정 없이 원하는 데이터를 빠르게 찾을 수 있습니다.

일반적으로, 두 번째 쿼리가 성능 측면에서 더 효율적일 가능성이 높습니다. 왜냐하면 전체 데이터를 정렬하는 대신 최대 값을 직접 찾아내기 때문에 처리해야 할 데이터 양이 적고, 실행 시간이 더 빠를 수 있기 때문입니다. 하지만 실제 성능은 데이터베이스의 크기, 인덱싱, DBMS의 최적화 방식 등 다양한 요소에 따라 달라질 수 있습니다. 그래서 가장 정확한 비교를 위해서는 실제 데이터와 DBMS 환경에서 두 쿼리를 실행해보고 실행 시간과 자원 사용량을 비교하는 것이 좋습니다.