[sql] 서브쿼리 최소화

서브쿼리는 데이터베이스에서 매우 강력한 기능이지만, 잘못 사용하면 성능에 부정적인 영향을 줄 수 있습니다. 이번 글에서는 서브쿼리를 최소화하여 성능을 최적화하는 방법에 대해 알아보겠습니다.

서브쿼리란?

서브쿼리는 다른 쿼리 안에 중첩된 쿼리로, 외부 쿼리의 결과에 따라 내부 쿼리의 실행이 동적으로 결정됩니다. 주로 SELECT, INSERT, UPDATE, DELETE 문 등에서 사용되며, 주로 비교 연산자와 함께 사용됩니다.

예를 들어, 다음과 같이 서브쿼리를 사용할 수 있습니다.

SELECT * FROM employees WHERE department_id = (SELECT id FROM departments WHERE name = 'Sales');

서브쿼리 최소화하기

서브쿼리는 편리하지만, 성능에 부정적인 영향을 미칠 수 있습니다. 이를 피하기 위해 다음과 같은 방법을 고려할 수 있습니다.

JOIN 사용

대부분의 경우, 서브쿼리를 JOIN으로 대체할 수 있습니다. 예를 들어 위의 예제는 다음과 같이 JOIN으로 변경할 수 있습니다.

SELECT e.* 
FROM employees e 
INNER JOIN departments d 
ON e.department_id = d.id
WHERE d.name = 'Sales';

EXISTS, NOT EXISTS 사용

서브쿼리를 사용하여 존재 여부를 확인하는 경우, EXISTS나 NOT EXISTS를 사용하여 JOIN을 피할 수 있습니다.

SELECT * FROM employees e
WHERE EXISTS (SELECT 1 FROM departments d WHERE e.department_id = d.id AND d.name = 'Sales');

파생 테이블

서브쿼리 대신 파생 테이블(Derived Table)을 사용하여 중첩 쿼리를 최소화할 수 있습니다.

SELECT * FROM 
  (SELECT id FROM departments WHERE name = 'Sales') d
JOIN employees e ON e.department_id = d.id;

요약

서브쿼리의 사용은 편리하지만, 성능에 영향을 줄 수 있기 때문에 최대한 최소화하는 것이 중요합니다. JOIN, EXISTS, NOT EXISTS 및 파생 테이블 등을 활용하여 서브쿼리를 최적화하는 것이 좋습니다.

참고 자료:

Happy coding!