2023. 11. 21. 00:52, 알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/131115
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;
일단 이 문제의 분류가, SUM, MAX, MIN 에 있는데, 내가 알고있는 기억이 나는방법이 위처럼 가격 기준으로 내림차순으로 정렬해서 LIMIT 1을 통해서 가장 위에 있는 것만 보여주는 형태라 그렇게 작성했다.
그 이후에 아마 MAX 라는걸 이용하면 해결이 가능한 경우일 것 같다는 생각이 들어서 이와 관련된 코드를 찾아보았다.
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE)
FROM FOOD_PRODUCT)
위와 같이 작성해서 해결할 수 있었고, 이런 형태를 서브쿼리 라고 한다.
그리고 SELECT * 라고 쓴 것은 전부 가져오겠다는 의미이다. 이 문제에서 요구하는 형태가 전부를 나타내므로 이렇게 사용할 수 있다. 맨 위에 내가 작성한 쿼리문도 SELECT * 형태로 수정해서 정상적으로 동작할 수 있다.
성능면에서 어느것이 더 우위에 있을지에 대한 궁금증이 있어서 GPT에 검색해보았다.
두 쿼리문 간의 성능 차이는 데이터베이스 엔진에 따라 다를 수 있습니다. 그러나 일반적으로는 첫 번째 쿼리문이 더 효율적일 가능성이 높습니다. 이는 몇 가지 이유로 인해 발생할 수 있습니다:
1. **인덱스 활용:** 첫 번째 쿼리문은 특정 열인 `PRICE`에 대해 정렬된 결과를 가져오고 있습니다. 만약 `PRICE` 열에 인덱스가 있다면, 데이터베이스 엔진은 이 인덱스를 사용하여 더 효율적으로 정렬된 결과를 생성할 수 있습니다. 반면 두 번째 쿼리문은 서브쿼리와 비교 연산을 수행하므로 인덱스를 활용하기 어려울 수 있습니다.
2. **데이터 양:** 두 번째 쿼리문은 서브쿼리를 사용하여 최대값을 계산하고, 이 값을 기반으로 원본 테이블을 필터링합니다. 이는 두 번의 쿼리 실행을 필요로 하며, 데이터 양이 많을수록 성능에 부담을 줄 수 있습니다.
3. **가독성 및 유지보수성:** 첫 번째 쿼리문은 명시적으로 필요한 열을 선택하고 있어 가독성이 좋습니다. 또한, 필요한 열만을 선택하므로 불필요한 데이터를 가져오지 않습니다. 이는 쿼리문의 유지보수성을 높일 수 있습니다.
따라서 대부분의 경우에는 첫 번째 쿼리문이 더 효율적이고 성능이 좋을 것입니다. 그러나 최적의 성능을 얻기 위해서는 실제 데이터베이스 엔진의 실행 계획을 확인해보고, 필요에 따라 인덱스를 적절하게 설정하는 것이 중요합니다.
결론적으로, 첫 번째 쿼리문이 가독성이 좋고 성능이 우수하므로 바람직한 선택으로 여겨집니다.
위와 가은 답을 기반으로, 두가지의 방향으로 모두 작성할 수 있도록 이해는 하고 있으면서, 이러한 형태가 필요하면 내가 작성했던 것처럼 쿼리문을 작성하도록 하자.
그래도 MAX의 활용에 대해서 잘 이해하자. 서브쿼리도.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 LV 1. 59415 최댓값 구하기 MySQL (0) | 2023.11.21 |
---|---|
프로그래머스 LV 1. 131697 가장 비싼 상품 구하기 MySQL (0) | 2023.11.21 |
프로그래머스 LV 4. 오프라인/온라인 판매 데이터 통합하기 MySQL (0) | 2023.11.21 |
프로그래머스 LV 4. 131118 서울에 위치한 식당 목록 출력하기 MySQL (0) | 2023.11.20 |
프로그래머스 LV 1. 59405 상위 n개 레코드 MySQL (0) | 2023.11.19 |
Comments, Trackbacks