참조 : https://developer.mozilla.org/ko/
참조 : 링크드인
쿼리 재작성은 SQL 쿼리의 구조를 변경하여 성능을 향상시키는 기법입니다. 쿼리의 재작성은 쿼리의 결과를 변경하지 않으면서 더 효율적인 형태로 쿼리를 바꾸는 과정을 포함합니다. 이 과정에서 주로 쿼리의 문법이나 연산자를 최적화하여 성능을 개선합니다.
예를 들어, SQL 쿼리에서 서브쿼리를 사용한 경우, 이 서브쿼리를 JOIN으로 변경하는 것만으로도 성능을 크게 향상시킬 수 있습니다. 서브쿼리보다는 조인을 사용하는 것이 일반적으로 더 효율적이기 때문입니다. 또한, 필요 없는 컬럼이나 불필요한 ORDER BY절을 제거하는 것도 쿼리 성능을 개선하는 방법 중 하나입니다.
-- 비효율적인 서브쿼리 예시
SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');
-- 쿼리 재작성: 서브쿼리를 JOIN으로 변경
SELECT e.employee_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.location = 'New York';
위의 예시에서, 원래 서브쿼리는 불필요한 중첩을 포함하고 있으며, 이를 JOIN으로 변경함으로써 데이터베이스가 한 번의 실행으로 더 적은 연산을 하도록 할 수 있습니다.
쿼리 리팩토링은 쿼리의 구조적 변경을 통해 쿼리 성능을 향상시키는 기법입니다. 쿼리 리팩토링의 목적은 쿼리의 재사용성과 유지 관리 용이성을 높이는 것이며, 이를 통해 데이터베이스와의 상호작용을 최적화할 수 있습니다. 리팩토링은 특히 복잡한 쿼리나 반복되는 쿼리에서 유용하게 사용됩니다.
리팩토링은 여러 가지 방법을 통해 이루어집니다. 예를 들어, 복잡한 쿼리의 분할이나 공통 테이블 표현식(CTE)을 사용하여 쿼리를 더 직관적으로 만드는 방법이 있습니다. 또한, 쿼리의 모듈화를 통해 다양한 쿼리에서 동일한 로직을 반복해서 작성하지 않도록 할 수 있습니다.
-- 비효율적인 복잡한 쿼리 예시
SELECT employee_name, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND e.salary > 5000
AND d.department_name = 'Sales'
AND e.employee_id IN (SELECT employee_id FROM employee_projects WHERE project_id = 1);
-- 쿼리 리팩토링: CTE를 사용하여 쿼리 가독성 향상
WITH ProjectEmployees AS (
SELECT employee_id
FROM employee_projects
WHERE project_id = 1
)
SELECT e.employee_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN ProjectEmployees pe ON e.employee_id = pe.employee_id
WHERE e.salary > 5000
AND d.department_name = 'Sales';
위의 예시에서, CTE(Common Table Expression)를 사용하여 서브쿼리를 외부에서 미리 계산한 후 메인 쿼리에서 사용하는 방식으로 리팩토링하였습니다. 이는 가독성을 높이고, 쿼리 성능을 최적화하는 데 도움을 줍니다.
RDBMS에서의 쿼리 최적화는 데이터베이스의 구조적인 요소와 밀접하게 연관이 있습니다. 데이터베이스의 구조는 스키마(Schema), 테이블(Table), 열(Column) 등으로 이루어져 있으며, 이 구조가 쿼리 성능에 직접적인 영향을 미칩니다.
JOIN을 사용하거나 조건에 자주 등장하는 컬럼에 인덱스를 적용하면 성능을 크게 개선할 수 있습니다.쿼리 재작성과 리팩토링은 SQL 쿼리 성능을 최적화하는 중요한 기법입니다. 쿼리 재작성은 쿼리 문법을 최적화하여 성능을 향상시키는 방법이고, 쿼리 리팩토링은 쿼리 구조를 더 효율적이고 유지 관리가 용이하게 만드는 방법입니다. 이러한 기법을 RDBMS의 구조적인 요소인 스키마, 테이블, 열과 결합하여 데이터베이스 성능을 최적화할 수 있습니다. 인덱스 사용과 정규화와 같은 추가적인 기법을 활용하면 더욱 효과적으로 성능을 개선할 수 있습니다.