공부/자바
SQL 튜닝
확두뇌
2024. 3. 5. 14:34
sql 튜닝
- 인덱스 사용하기
SELECT *
FROM orders
WHERE order_date > '2021-01-01'
ORDER BY order_id
CREATE INDEX idx_order_date ON orders (order_date);
CREATE INDEX idx_order_id ON orders (order_id);
- 적절한 join 사용하기
- 불필요한 join을 피하고 쿼리의 실행 속도를 향상시킬 수 있음
SELECT *
FROM orders
JOIN customers
ON orders.customer_id = customers.customer_id
WHERE orders.order_date > '2021-01-01'
대신
SELECT *
FROM orders
WHERE orders.order_date > '2021-01-01'
- 서브쿼리 최소화하기
서브쿼리 대신 join, union, exists등의 다른 방법을 사용하는 것이 좋음
SELECT *
FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE gender = 'F'
)
대신
SELECT orders.*
FROM orders
JOIN customers
ON orders.customer_id = customers.customer_id
WHERE customers.gender = 'F'
- 쿼리 실행 계획 확인하기
mysql에서는 explain 키워드를 사용하여 쿼리 실행 계획을 확인할 수 있다.
EXPLAIN SELECT *
FROM orders
WHERE order_date > '2021-01-01'
ORDER BY order_id
쿼리 실행 계획은 쿼리가 어떻게 실행되는지에 대한 정보를 제공하므로, 성능을 분석하는데 유용함.
- 쿼리 성능 모니터링하기
쿼리 성능 모니터링을 통해 어떤 쿼리가 가장 많은 시간을 소모하는 지, 어떤 쿼리가 자주 실행되는지 등을 파악하여 성능 향상을 위한 대책을 수립할 수 있다. 데이터베이스 관리 시스템에서 제공하는 성능 모니터링 툴을 사용하거나, 쿼리 로그를 분석하여 쿼리 성능을 모니터링 하는 것이 좋다.
- 쿼리 최적화하기
where 절을 최적화하여 필요한 데이터만 검색하는 것이 좋다. 또한 쿼리가 자주 실행되는 경우에는 캐시를 사용하여 쿼리의 실행 속도를 높이는 것이 좋다.
SELECT *
FROM orders
WHERE order_date > '2021-01-01'
ORDER BY order_date DESC
대신
-- 인덱스를 사용한 최적화된 쿼리
SELECT *
FROM orders
WHERE order_date > '2021-01-01'
ORDER BY order_id DESC