데이터베이스 쿼리 속도는 애플리케이션의 성능에 큰 영향을 미칠 수 있습니다. 느린 쿼리는 사용자 경험을 저하시키고, 서버 자원을 낭비하며, 비즈니스 성과에 부정적인 영향을 줄 수 있습니다.
인덱스 사용 최적화
인덱스는 데이터베이스에서 특정 열에 대한 검색을 빠르게 하기 위한 데이터 구조입니다. 인덱스를 적절하게 사용하면 쿼리 성능이 크게 향상될 수 있습니다.
ex)
SELECT * FROM children WHERE last_name = 'Sam';
위 쿼리에 대해 last_name열에 인덱스를 추가하면 성능이 향상됩니다.
CREATE INDEX idx_last_name ON children(last_name);
쿼리 계획 분석 - https://workspace-2308.tistory.com/entry/MySQL-Explain
MySQL Explain 실행계획
Explain 쿼리에 대한 데이터를 어떻게 불러오는지에 대한 실행계획을 의미합니다. 즉, 데이터베이스 엔진에 의해 쿼리가 실행되는 방법에 대한 자세한 분석을 제공합니다. MySQL 에서 Explain을 사용
workspace-2308.tistory.com
조인 최적화
복잡한 조인 쿼리는 성능 저하의 주된 원인 중 하나입니다. 조인 순서를 최적화하고 필요한 경우 인덱스를 추가하면 성능을 향상시킬 수 있습니다.
ex)
SELECT orders.id, children.name
FROM orders
JOIN children ON orders.children_id = children.id;
이 경우 orders.customer_id, customers.id에 인덱스를 추가하면 향상됩니다.
CREATE INDEX idx_orders_children_id ON orders(children_id);
CREATE INDEX idx_children_id ON children(id);
LIMIT 및 페이징 사용
대량의 데이터를 조회 할 경우 LIMIT , 페이징을 사용하여 성능을 향상시킬 수 있습니다.
ex)
- 첫 열개의 행만 조회
SELECT * FROM children ORDER BY created_at DESC LIMIT 10;
- 페이징을 사용하여 10개씩 데이터 조회
SELECT * FROM children ORDER BY created_at DESC LIMIT 10 OFFSET 20;
쿼리 캐싱
ex) redis사용
import redis
# Redis 클라이언트 설정 (redis 기본포트 : 6379)
r = redis.Redis(host='localhost', port=6379, db=0)
# 캐싱된 데이터 조회
cached_data = r.get('children_243')
if cached_data is None:
# 캐시된 데이터가 없으면 데이터베이스에서 조회
children = db.query('SELECT * FROM children WHERE id = 243')
r.set('children_243', children)
else:
children = cached_data
반응형
'SQL' 카테고리의 다른 글
Mysql - dump 백업하기 (0) | 2023.04.13 |
---|---|
JSON_EXTRACT 데이터 추출 (0) | 2023.04.04 |
MySQL - UNIXTIME 변환 (0) | 2023.03.28 |
MySQL Explain 실행계획 (0) | 2023.03.08 |
MySQL Convert UNIX TimeStamp (0) | 2023.02.16 |