티스토리 뷰
SQL 쿼리를 실행하다 보면 실행시간이 길어지는 경우가 있습니다. 이러한 현상이 발생하는 이유는 쿼리를 비효율적으로 작성했기 때문인데요. 이는 조회하려는 DB에도 부하를 주기 때문에 시스템에 영향을 끼칠 수가 있습니다. 따라서 오늘은 SQL 쿼리 속도가 느린 경우를 살펴보고 이를 빠르게 개선할 수 있는 방법들에 대해 사례와 함께 살펴보도록 하겠습니다.
1. SELECT * (asterisk) 사용하지 않기
모든 열을 조회하는 경우 asterisk(*)를 사용하는데, 이는 불필요한 데이터를 가져오게 되어 조회 속도가 느려집니다. 따라서 필요한 열만을 명시적으로 선택해야 하는 것이 효율적입니다.
-- 느린 쿼리
SELECT * FROM orders WHERE status = 'completed';
-- 빠른 쿼리
SELECT order_id, customer_id, order_date FROM orders WHERE status = 'completed';
2. LIKE 연산자의 앞에 와일드카드(%) 사용하지 않기
LIKE 연산자의 패턴 검색에서 와일드카드(%)를 앞에 사용하면 인덱스를 사용할 수 없어 전체 테이블을 스캔하게 되어 성능이 저하되므로 와일드카드를 앞에 사용하지 않는 것이 좋습니다.
-- 느린 쿼리
SELECT * FROM products WHERE product_name LIKE '%apple%';
-- 빠른 쿼리
SELECT * FROM products WHERE product_name LIKE 'apple%';
3. 서브쿼리 최소화
서브쿼리(subquery)를 남발하면 성능이 저하될 수 있습니다. 필요한 경우 조인을 사용하여 서브쿼리를 최소화하고 성능을 향상시키는 것이 좋습니다.
-- 느린 쿼리
SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'HR');
-- 빠른 쿼리
SELECT employees.* FROM employees JOIN departments ON employees.department_id = departments.department_id WHERE departments.department_name = 'HR';
4. ORDER BY 사용 줄이기
ORDER BY는 정렬 작업을 수행하므로 큰 데이터셋에서는 성능에 영향을 미칠 수 있습니다. 필요한 경우에만 사용하도록 합니다.
-- 느린 쿼리
SELECT * FROM customers ORDER BY registration_date;
-- 빠른 쿼리
SELECT * FROM customers;
5. 계산된 필드 사용하지 않기
WHERE 절이나 JOIN 조건에서 계산이 필요한 경우 성능이 저하될 수 있습니다. 계산이 필요한 경우 미리 계산된 필드를 사용하거나 최소한으로 유지하는 것이 좋습니다.
-- 느린 쿼리
SELECT * FROM orders WHERE YEAR(order_date) = 2023;
-- 빠른 쿼리
SELECT * FROM orders WHERE order_date >= '2023-01-01' AND order_date < '2024-01-01';
오늘은 SQL 쿼리를 실행할 경우 처리 속도를 느리게 하는 경우들에 대해 살펴보았습니다. 다들 숙지하셔서 효율적인 쿼리 작성하시길 바라겠습니다.